#include <iostream>
#include <stack>
using namespace std;
const int MAXN=1e6+10;
const int INF=1e9;
stack <int> st;
int a[MAXN], lef[MAXN], ri[MAXN];
int sp[MAXN][20], stepen[MAXN];
int n;
void sparce_table() {
    int curind=1;
    for (int i=1;(1<<i)<=n;i++) {
        int st=(1<<(i-1));
        for (int j=0;j<n;j++) {
            if (j+(1<<i)-1>=n) break;
            sp[j][i]=max(sp[j][i-1],sp[j+st][i-1]);
        }
        while (curind<=(1<<i)) {
            stepen[curind]=i;
            curind++;
        }
    }
}
int find_max(int l, int r) {
    int ss=r-l+1;
    int curst=(1<<stepen[ss]);
    return max(sp[l][stepen[ss]],sp[r-curst+1][stepen[ss]]);
}
int main () {
    /**
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);**/
    cin >> n;
    for (int i=0;i<n;i++) {
        cin >> a[i];
        sp[i][0]=a[i];
    }
    sparce_table();
    for (int i=0;i<n;i++) {
        while (!st.empty() && a[i]>a[st.top()]) {
            ri[st.top()]=i;
            st.pop();
        }
        st.push(i);
    }
    while (!st.empty()) {
        ri[st.top()]=st.top();
        st.pop();
    }
    for (int i=n-1;i>=0;i--) {
        while (!st.empty() && a[i]>a[st.top()]) {
            lef[st.top()]=i;
            st.pop();
        }
        st.push(i);
    }
    while (!st.empty()) {
        lef[st.top()]=st.top();
        st.pop();
    }
    int ans=-INF;
    for (int i=0;i<n;i++) {
        int ind=ri[i];
        if (ind!=i) {
            int l, r, mid;
            l=ind+1; r=n-1;
            while (l<=r) {
                mid=(l+r)/2;
                if (find_max(ind,mid)>a[i]) r=mid-1;
                else l=mid+1;
            }
            ans=max(ans,a[i]-(r-i+1));
        }
        ind=lef[i];
        if (ind!=i) {
            int l, r, mid;
            l=0; r=ind-1;
            while (l<=r) {
                mid=(l+r)/2;
                if (find_max(mid,ind)>a[i]) l=mid+1;
                else r=mid-1;
            }
            ans=max(ans,a[i]-(i-l+1));
        }
    }
    cout << ans << endl;
    return 0;
}
/**
5
3 1 4 1 59
**/
