#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 main () {
    /**
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);**/
    int n;
    cin >> n;
    for (int i=0;i<n;i++) {
        cin >> a[i];
    }
    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) ans=max(ans,a[i]-(ind-i+1));
        ind=lef[i];
        if (ind!=i) ans=max(ans,a[i]-(ind-i+1));
    }
    cout << ans << endl;
    return 0;
}
/**
5
3 1 4 1 59
**/
