#include <bits/stdc++.h>
using namespace std;
long long n, a[100050], last[100050], itung = 0;
vector<pair<long long, long long> > v1[100050];
bool ans[100050], t = false;
pair<long long, long long> seg[400000];
void build(long long kir, long long kan, long long st) {
  long long mid = (kir + kan) / 2;
  if (kir == kan) {
    seg[st].first = -1;
    seg[st].second = 1e9;
    return;
  }
  build(kir, mid, st * 2);
  build(mid + 1, kan, (st * 2) + 1);
  seg[st].first = min(seg[st * 2].first, seg[(st * 2) + 1].first);
  seg[st].second = max(seg[st * 2].second, seg[(st * 2) + 1].second);
}
void change(long long kir, long long kan, long long st, long long l,
            long long r, long long sum) {
  long long mid = (kir + kan) / 2;
  if (kir > r || kan < l) {
    return;
  }
  if (kir >= l && kan <= r) {
    seg[st].first = sum;
    seg[st].second = sum;
    return;
  }
  change(kir, mid, st * 2, l, r, sum);
  change(mid + 1, kan, st * 2 + 1, l, r, sum);
  seg[st].first = min(seg[st * 2].first, seg[st * 2 + 1].first);
  seg[st].second = max(seg[st * 2].second, seg[(st * 2) + 1].second);
  return;
}
long long query(long long kir, long long kan, long long st, long long l,
                long long r) {
  long long mid = (kir + kan) / 2;
  if (kir > r || kan < l) {
    return 1e9;
  }
  if (kir >= l && kan <= r) {
    return seg[st].first;
  }
  return min(query(kir, mid, st * 2, l, r),
             query(mid + 1, kan, st * 2 + 1, l, r));
}
long long query2(long long kir, long long kan, long long st, long long l,
                 long long r) {
  long long mid = (kir + kan) / 2;
  if (kir > r || kan < l) {
    return 0;
  }
  if (kir >= l && kan <= r) {
    return seg[st].second;
  }
  return max(query2(kir, mid, st * 2, l, r),
             query2(mid + 1, kan, st * 2 + 1, l, r));
}
void solve() {
  cin >> n;
  for (int i = (int)(1); i <= (int)(n + 1); i++) {
    last[i] = 0;
  }
  for (int i = (int)(1); i <= (int)(n); i++) {
    cin >> a[i];
    if (a[i] != 1) {
      t = true;
    } else {
      itung++;
    }
    if (i - 1 >= last[a[i]] + 1) {
      v1[i - 1].push_back(make_pair(last[a[i]] + 1, a[i]));
    }
    last[a[i]] = i;
  }
  for (int i = (int)(1); i <= (int)(n + 1); i++) {
    if (last[i] + 1 <= n) {
      v1[n].push_back(make_pair(last[i] + 1, i));
    }
  }
  build(1, n, 1);
  memset(ans, 0, sizeof(ans));
  if (t) {
    ans[1] = true;
  }
  for (int i = (int)(1); i <= (int)(n); i++) {
    change(1, n, 1, a[i], a[i], i);
    for (int j = (int)(0); j <= (int)(v1[i].size() - 1); j++) {
      long long x = query(1, n, 1, 1, v1[i][j].second - 1),
                y = query2(1, n, 1, 1, v1[i][j].second - 1);
      if (x >= v1[i][j].first && i >= y) {
        ans[v1[i][j].second] = true;
      }
    }
  }
  if (itung == n) {
    cout << 1 << endl;
    return;
  }
  for (int i = (int)(1); i <= (int)(n + 1); i++) {
    if (!ans[i]) {
      cout << i << endl;
      return;
    }
  }
  cout << n + 2 << endl;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int t = 1;
  while (t--) {
    solve();
  }
}
