#include #include #include #include #include #include #include #include #include #include #include #include #define FORE(it, c) for(__typeof((c).begin()) it = (c).begin(); it != (c).end(); ++it) #define FC(aa, bb) FORE(bb, aa) #define debug(x) cerr << #x << " = " << x << endl; #define debugv(x) cerr << #x << " = " ; FORE(it, (x)) cerr << *it << ", "; cerr << endl; #define fup(i, a, b) for(int i = (a); i < (b); ++i) #define fdo(i, a, b) for(int i = (a); i >= (b); --i) #define FOR fup #define FORD fdo #define REP(i, n) for(int i = 0; i < (n); ++i) #define ALL(x) (x).begin(), (x).end() #define CLR(x) memset((x), 0, sizeof(x)) #define MP make_pair #define PB push_back #define siz(a) ((int)(a).size()) #define SZ siz #define inf 1000000000 #define FI first #define SE second using namespace std; using namespace tr1; typedef long long lli; typedef double ld; typedef lli LL; typedef ld LD; typedef vector VI; typedef pair PII; struct zap { int a, b, n; zap(int _a = 0, int _b = 0, int _n = 0) : a(_a), b(_b), n(_n) {} int operator<(const zap &x) const { return b < x.b; } }; PII p[1000100]; int c[1000100], res[1000100]; int main(void) { while (1) { int n, q; scanf("%d%d", &n, &q); if (n == 0 && q == 0) break; REP (i, n) scanf("%d", &c[i]); unordered_map last, prev; vector Q; REP (i, q) { int a, b; scanf("%d%d", &a, &b); --a; --b; Q.PB(zap(a, b, i)); res[i] = -1; } sort(ALL(Q)); int j = 0, mn = -1; REP (i, n) { if (last.find(c[i]) != last.end()) { prev[c[i]] = last[c[i]]; if (mn == -1 || (prev[c[i]] > prev[mn])) mn = c[i]; } last[c[i]] = i; for (; j < SZ(Q) && Q[j].b == i; ++j) { if (prev[mn] >= Q[j].a) res[Q[j].n] = mn; } } REP (i, q) { if (res[i] == -1) puts("OK"); else printf("%d\n", res[i]); } puts(""); } return 0; }