#include <bits/stdc++.h>

using namespace std;

typedef int ll;

class node{
public:
    ll max1,max2;
    node(){
        max1=0;
        max2=0;
    }
};

const ll Size=5e3+1;
ll a[Size];
node dp[4*Size];
ll n;

void build(ll l,ll r,ll i){
    if(l==r){
        dp[i].max1=a[l];
    }else{
        ll mid=(l+r)/2;
        build(l,mid,i*2);
        build(mid+1,r,i*2+1);
        ll arr[4]={dp[i*2].max1, dp[i*2+1].max1, dp[i*2].max2, dp[i*2+1].max2};
        sort(arr,arr+4);
        dp[i].max1=arr[3];
        dp[i].max2=arr[2];
    }
}
node query(ll l,ll r,ll tl,ll tr,ll i){
    if(tl>r or tr<l){
        node temp;
        temp.max1=-1;
        return temp;
    }
    if(tl==l and tr==r){
        return dp[i];
    }else{
        ll mid=(l+r)/2;
        node n1=query(l,mid,tl,min(mid,tr),i*2);
        node n2=query(mid+1,r,max(mid+1,tl),tr,i*2+1);
        if(n1.max1==-1){
            return n2;
        }
        if(n2.max1==-1){
            return n1;
        }
        node ans;
        ll arr[4]={n1.max1, n2.max1, n2.max2, n2.max2};
        sort(arr,arr+4);
        ans.max1=arr[3];
        ans.max2=arr[2];
        return ans;
    }
}

void solve(){
    cin>>n;
    for(ll i=0;i<n;i++){
        cin>>a[i];
    }
    build(0,n-1,1);
    ll ans=-1e18;
    for(ll i=0;i<n;i++){
        for(ll j=i+1;j<n;j++){
            node max2=query(0,n-1,i,j,1);
            ans=max(ans,max2.max2-j+i-1);
        }
    }
    cout<<ans<<endl;
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ll t=1;
    while(t--){
        solve();
    }
    return 0;
}
