#include #include #include #include #include #include #include #include #include using namespace std; typedef pair< int, int > par; #define x first #define y second #define FORC(it, V) for(__typeof((V).begin()) it = (V).begin(); it != (V).end(); ++it) const int MAXN = 1000005; int a[MAXN], p[MAXN], k[MAXN]; int ans[MAXN]; par e[2*MAXN]; struct cmp { bool operator() ( const int &a, const int &b ) { if( p[a] != p[b] ) return p[a] < p[b]; if( k[a] != k[b] ) return k[a] < k[b]; return a < b; } }; set< int, cmp > S; map< int, int > M; int main(void) { int n, q; while( scanf( "%d %d", &n, &q ) == 2 ) { if( n == 0 && q == 0 ) break; M.clear(), S.clear(); for( int i = 0; i < n; ++i ) scanf( "%d", a+i ); int c = 0; for( int i = 0; i < q; ++i ) { scanf( "%d %d", p+i, k+i ); --p[i], --k[i]; e[c++] = par( p[i], i ); e[c++] = par( k[i]+1, i ); ans[i] = -1; } sort( e, e + c ); int w = 0; for( int i = 0; i < n; ++i ) { while( w < c && e[w].x <= i ) { int j = e[w].y; if( p[j] == e[w].x ) S.insert( j ); else S.erase( j ); w++; } if( M.count(a[i]) ) { int l = M[ a[i] ]; while( S.size() ) { int x = *S.begin(); if( p[x] > l ) break; ans[x] = a[i]; S.erase( S.begin() ); } } M[ a[i] ] = i; } for( int i = 0; i < q; ++i ) if( ans[i] == -1 ) puts( "OK" ); else printf( "%d\n", ans[i] ); putchar( '\n' ); } return 0; }