#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 100;
struct Node {
  int id, w;
} a[maxn];
bool vis[maxn];
int pre[maxn];
int sum[maxn];
int ans = a[1].w + 1;
int num = 1;
int g;
int nnum[maxn];
int fin(int a) { return pre[a] == a ? a : pre[a] = fin(pre[a]); }
void solve(int fid, int id) {
  ;
  int f = fin(pre[fid]);
  int ft = fin(pre[id]);
  nnum[sum[ft]]--;
  nnum[sum[f]]--;
  sum[f] += sum[ft];
  nnum[sum[f]]++;
  sum[ft] = 0;
  pre[ft] = f;
  if (vis[ft]) {
    --g;
  }
}
inline bool check() {
  if (g <= num) return false;
  int tmp = sum[a[1].id];
  if (nnum[tmp] != g) return false;
  return true;
}
int main(int argc, const char *argv[]) {
  int n;
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    pre[i] = i;
    scanf("%d", &a[i].w);
    a[i].id = i;
    sum[i] = 1;
    vis[i] = 0;
    nnum[i] = 0;
  }
  sort(a + 1, a + n + 1, [&](Node a, Node b) { return a.w < b.w; });
  num = 0;
  for (int i = 1; i <= n; ++i) {
    Node &t = a[i];
    if (vis[t.id - 1]) {
      solve(t.id - 1, t.id);
    }
    if (vis[t.id + 1]) {
      solve(t.id + 1, t.id);
    }
    if (!vis[t.id - 1] && !vis[t.id + 1]) {
      g++;
      nnum[sum[t.id]]++;
    }
    vis[t.id] = 1;
    if (check()) {
      num = g;
      ans = a[i].w + 1;
    }
  }
  cout << ans << endl;
  return 0;
}
