#include <bits/stdc++.h>
//#define int long long
#define fast ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define lg2(n) (63-__builtin_clzll(n))
#define mask(n) (1LL << (n))
#define TASK ""
#define openfile();  if( fopen(TASK".inp", "r")){freopen(TASK".inp", "r", stdin);freopen(TASK".out", "w", stdout);}
#define lc(n) (n << 1)
#define rc(n) ((n << 1) | 1)

#define fi first
#define se second
#define FOR(i, l, r, k) for( int i = l; i <= r; i += k)
#define FOD(i, r, l, k) for( int i = r; i >= l; i -= k)

#define mii map<int,int>
#define umi unordered_map<int, int>
#define pii pair<int,int>
#define vi vector<int>

using namespace std;

const int oo = 1e9 + 1;
const int mod = 20262026;
const int nmax = 1e6 + 8;
const int base = 311;

int n, a[nmax], r[nmax];

stack<int> s, is;

int calc(int l, int r){
    return r - l + 1;
}

main(){
    fast;
    openfile();
    cin >> n;
    s.push(0);
    a[0] = -oo;
    is.push(n + 1);
    a[n + 1] = -oo;
    for(int i = 1;i <= n; ++i) cin >> a[i];
    for(int i = n; i >= 1; --i){
        while(a[i] <= a[is.top()]){
            is.pop();
        }
        r[i] = is.top();
        is.push(i);
//        cout << r[]
    }
    int ans = 0;
    for(int i = 1; i <= n; ++i){
        while(a[i] <= a[s.top()]){
            s.pop();
        }
        if(calc(s.top() + 1, r[i] - 1) >= a[i]) ans = max(ans, a[i]);
        s.push(i);
    }
    cout << ans;
}
