#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 400, S = 1500;
int n, q, a[N], licz[N], wynik[N];
struct Zap {
  int L;
  int R;
  int grupa;
  int indeks;
} T[N];
bool funkcja(const Zap &A, const Zap &B) {
  if (A.grupa != B.grupa) return A.grupa < B.grupa;
  return (A.grupa & 1) ? (A.R > B.R) : (A.R < B.R);
}
vector<int> zbior;
bool jest[N];
inline void zmien(int x, bool dodaj) {
  licz[x] += (dodaj == true) ? 1 : -1;
  if (licz[x] == 1 && jest[x] == false) {
    zbior.push_back(x);
    jest[x] = true;
  }
}
int32_t main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  scanf("%d", &q);
  for (int i = 1; i <= q; i++) {
    scanf("%d%d", &T[i].L, &T[i].R);
    T[i].grupa = T[i].L / S;
    T[i].indeks = i;
  }
  sort(T + 1, T + (q + 1), funkcja);
  int L = 1, R = 1;
  zmien(a[1], true);
  zbior.reserve(1e6);
  for (int i = 1; i <= q; i++) {
    int newL = T[i].L;
    int newR = T[i].R;
    while (R < newR) R++, zmien(a[R], true);
    while (L > newL) L--, zmien(a[L], true);
    while (R > newR) zmien(a[R], false), R--;
    while (L < newL) zmien(a[L], false), L++;
    while (zbior.empty() == false && licz[zbior.back()] != 1) {
      jest[zbior.back()] = false;
      zbior.pop_back();
    }
    if (zbior.empty() == false) wynik[T[i].indeks] = zbior.back();
  }
  for (int i = 1; i <= q; i++) printf("%d\n", wynik[i]);
  getchar();
  getchar();
  return 0;
}
