#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<set>
#define mem(a,x) memset(a,x,sizeof(a))
#define s1(x) scanf("%d",&x)
#define s2(x,y) scanf("%d%d",&x,&y)
#define s3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define s4(x,y,z,k) scanf("%d%d%d%d",&x,&y,&z,&k)
#define ff(a,n) for(int i = 0 ; i < n; i++) scanf("%d",a+i)
#define ls 2*rt
#define rs 2*rt+1
#define lson ls,L,mid
#define rson rs,mid+1,R
#define ll long long
using namespace std;
typedef pair<int,int> pii;
//inline ll ask(int x){ll res=0;while(x)res+=c[x],x-=x&(-x);return res;}
//inline void add(int x,int d){while(x<=n)c[x]+=d,x+=x&(-x);}
//int gcd(int a, int b) { return b == 0 ? a : gcd(b, a%b);}
const ll inf = 0x3f3f3f3f;
const int mx = 1e5+10;
multiset<int>ms;
set<int>s;
multiset<int> :: iterator m1,m2;
set<int> :: iterator it2;
struct no{
int x,po;
}p[mx];
int n;
bool cmp(no &a, no &b){
return a.x<b.x;
}
int main(){
// freopen("F:\\in.txt","r",stdin);
//int T=10; scanf("%d",&T);
while(s1(n) != EOF){
s.clear();
ms.clear();
for(int i = 1; i <= n; i++){
scanf("%d",&p[i].x);
p[i].po = i;
}
if(n==1){
cout<<p[1].x+1<<endl;
continue;
}
sort(p+1,p+1+n,cmp);
s.insert(0);
s.insert(n+1);
ms.insert(n);
int ans,cnt=-1;
int len,a,b;
for(int i = n; i > 1; i--){
s.insert(p[i].po);
it2 = s.lower_bound(p[i].po);
it2++; a=*it2;
it2--;it2--; b = *it2;
len = a-b-1;
m1=ms.lower_bound(len);
ms.erase(m1);
if(a-p[i].po > 1){
ms.insert(a-p[i].po-1);
}
if(p[i].po -b > 1){
// cout<<"charu"<<p[i].po-b-1<<endl;
ms.insert(p[i].po-b-1);
}
m1=ms.begin(); m2 = ms.end(); m2--;
//cout<<*m1<<"=="<<*m2<<"size="<<ms.size()<<endl;
int h1 = *m1,h2=*m2,h3=ms.size();
//cout<<cnt<<"**"<<endl;
if( h1==h2 && h3>=cnt){ //不能写size()>= cnt
//cout<<"jin"<<endl;
ans = p[i-1].x+1;
cnt = ms.size();
}
}
if(cnt == -1){
cout<<p[n].x+1<<endl;
}
else
cout<<ans<<endl;
}
return 0;
}