#include <bits/stdc++.h>
using namespace std;
const static int SZ = 700;
bool cmp(tuple<int, int, int> a, tuple<int, int, int> b) {
  if (get<0>(a) / SZ != get<0>(b) / SZ) return get<0>(a) / SZ < get<0>(b) / SZ;
  return get<0>(a) / SZ % 2 ? get<1>(a) > get<1>(b) : get<1>(a) < get<1>(b);
}
tuple<int, int, int> query[500010];
int ans[500010];
int n, q;
int arr[500010];
int cnt[500010];
int st[500010];
int buk_st[730];
int tot_st;
void mo_add(int x) {
  if (cnt[x] == 1) {
    st[x]--;
    buk_st[x / SZ]--;
    tot_st--;
  }
  if (++cnt[x] == 1) {
    st[x]++;
    buk_st[x / SZ]++;
    tot_st++;
  }
}
void mo_erase(int x) {
  if (cnt[x] == 1) {
    st[x]--;
    buk_st[x / SZ]--;
    tot_st--;
  }
  if (--cnt[x] == 1) {
    st[x]++;
    buk_st[x / SZ]++;
    tot_st++;
  }
}
int get() {
  if (tot_st == 0) return 0;
  for (int i = 0; i < 720; i++)
    if (buk_st[i] != 0)
      for (int j = i * SZ;; j++)
        if (st[j] != 0) return j;
}
int main(void) {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &arr[i]);
  scanf("%d", &q);
  for (int i = 0; i < q; i++) {
    int l, r;
    scanf("%d %d", &l, &r);
    query[i] = make_tuple(l, r, i);
  }
  sort(query, query + q, cmp);
  int st = 0;
  int en = 0;
  mo_add(0);
  for (int i = 0; i < q; i++) {
    int l, r, idx;
    tie(l, r, idx) = query[i];
    while (st > l) mo_add(arr[--st]);
    while (en < r) mo_add(arr[++en]);
    while (st < l) mo_erase(arr[st++]);
    while (en > r) mo_erase(arr[en--]);
    ans[idx] = get();
  }
  for (int i = 0; i < q; i++) printf("%d\n", ans[i]);
}
