#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; // using namespace __gnu_cxx; typedef long long ll; typedef double db; typedef vector vi; typedef vector vs; typedef pair pii; #define INF (1<<30) #define PB push_back #define FI first #define SE second #define REP(i,n) for(int (i)=0;(i)<(n);++(i)) #define FUP(i,a,b) for(int (i)=(a);(i)<=(b);++(i)) #define FDN(i,a,b) for(int (i)=(a);(i)>=(b);--(i)) struct Zap{ int a,b; int id; int odp; }; map lst; int tab[2000000]; Zap zaps[2000000]; bool cmp1(const Zap &a, const Zap &b){ return (a.a == b.a ? a.b < b.b : a.a < b.a); } bool cmp2(const Zap &a, const Zap &b){ return a.id < b.id; } int main(){ while(true){ lst.clear(); int m,q; scanf("%d%d", &m, &q); if(m==0 && q==0) break; REP(i,m){ scanf("%d", &tab[i]); } REP(i,q){ scanf("%d%d", &zaps[i].a, &zaps[i].b); zaps[i].id = i; zaps[i].odp = -1; } sort(zaps, zaps+q, cmp1); int w = 0; queue kol; REP(i,m){ int curr = tab[i]; if(lst.find(curr) != lst.end()){ // jest int gdzie = lst[curr]; while(!kol.empty()){ int czub = kol.front(); if(zaps[czub].a <= gdzie){ if(zaps[czub].b >= i+1){ zaps[czub].odp = curr; } kol.pop(); } else { break; } } } lst[curr] = i+1; while(w < q && zaps[w].a >= i+1){ kol.push(w); w++; } } sort(zaps, zaps+q, cmp2); REP(i,q){ if(zaps[i].odp == -1) printf("OK\n"); else printf("%d\n", zaps[i].odp); } printf("\n"); } return 0; }