#include #include #include #include #include using namespace std; //#define debug(fmt, ...) fprintf(stderr, fmt, ## __VA_ARGS__) #define debug(fmt, ...) #define OFFS 1048576 #define INF 1000000000 static pair Tree[2*OFFS]; static int Arr[OFFS], Next[OFFS]; static void compute(int v, int p, int q) { if(q-p == 1) { Tree[v] = make_pair(Next[p], Arr[p]); return; } int m = (p+q)/2; compute(2*v, p, m); compute(2*v+1, m, q); Tree[v] = min(Tree[2*v], Tree[2*v+1]); } static pair query(int v, int p, int q, int a, int b) { if(p == a && q == b) return Tree[v]; int m = (p+q)/2; if(b <= m) return query(2*v, p,m, a,b); if(a >= m) return query(2*v+1, m,q, a,b); return min(query(2*v, p,m, a,m), query(2*v+1, m,q, m,b)); } static void solve() { int n, q; scanf("%d %d",&n,&q); if(!n && !q) exit(0); for(int i=0; i > S; for(int i=0; i >::iterator it = S.lower_bound(make_pair(Arr[i], -1)); if(it != S.end() && it->first == Arr[i]) { Next[it->second] = i; S.erase(it); } S.insert(make_pair(Arr[i], i)); } } compute(1, 0, OFFS); while(q--) { int a,b; scanf("%d %d",&a,&b); pair ans = query(1, 0,OFFS, a-1,b); if(ans.first < b) printf("%d\n", ans.second); else printf("OK\n"); } printf("\n"); } int main(void) { for(;;) solve(); }