#include <bits/stdc++.h>
using namespace std;
struct query {
  long l, r, id;
};
long n, m, tmp, a[500005], last[500005];
long ans[500005];
query q[500005];
pair<long, long> st[2000005];
void update(long id, long l, long r, long i, long x) {
  if (l > i || r < i) {
    return;
  }
  if (l == r) {
    st[id].first = x;
    st[id].second = a[i];
    return;
  }
  long mid = (l + r) / 2;
  update(2 * id, l, mid, i, x);
  update(2 * id + 1, mid + 1, r, i, x);
  st[id] = min(st[2 * id], st[2 * id + 1]);
}
pair<long, long> get(long id, long l, long r, long i, long j) {
  if (l > j || r < i) {
    return make_pair(1e9, 1e9);
  }
  if (l >= i && r <= j) {
    return st[id];
  }
  long mid = (l + r) / 2;
  return min(get(2 * id, l, mid, i, j), get(2 * id + 1, mid + 1, r, i, j));
}
bool cmp(query a, query b) {
  if (a.r != b.r) {
    return a.r < b.r;
  } else {
    return a.l < b.l;
  }
}
int main() {
  scanf("%ld", &n);
  for (int i = 1; i <= n; i++) scanf("%ld", &a[i]);
  scanf("%ld", &m);
  for (int i = 1; i <= m; i++) {
    scanf("%ld %ld", &q[i].l, &q[i].r);
    q[i].id = i;
  }
  sort(q + 1, q + 1 + m, cmp);
  for (int i = 1; i <= n; i++) {
    update(1, 1, n, i, 1e9);
  }
  tmp = 1;
  for (int i = 1; i <= n; i++) {
    if (last[a[i]] != 0) {
      update(1, 1, n, last[a[i]], 1e9);
      update(1, 1, n, i, last[a[i]]);
    } else {
      update(1, 1, n, i, 0);
    }
    last[a[i]] = i;
    while (i == q[tmp].r) {
      pair<long, long> dm = get(1, 1, n, q[tmp].l, q[tmp].r);
      if (dm.first >= q[tmp].l) {
        ans[q[tmp].id] = 0;
      } else {
        ans[q[tmp].id] = dm.second;
      }
      tmp++;
    }
  }
  for (int i = 1; i <= m; i++) {
    printf("%ld\n", ans[i]);
  }
}
