#include #include #include #include using namespace std; #define MAX 1000010 int q[MAX]; int end[MAX]; int begin[MAX]; int output[MAX]; inline bool cmp( int a, int b ) { return end[a] < end[b]; } int A[MAX]; int B[MAX]; int C[MAX]; int last[MAX]; int cookie[MAX]; int tajm; int N, Q; int main(void) { for (;;) { ++tajm; scanf("%d%d", &N, &Q); if ( N == 0 && Q == 0 ) break; for ( int i = 1; i <= N; ++i ) { scanf("%d", A + i); C[i] = B[i] = A[i]; } sort( B, B + N ); for ( int i = 1; i <= N; ++i ) A[i] = lower_bound( B, B + N, A[i] ) - B + 1; for ( int i = 0; i < Q; ++i ) { scanf("%d%d", begin + i, end + i); q[i] = i; } sort( q, q + Q, cmp ); memset( output, -1, sizeof( output[0] ) * Q ); int right = -1, right_value = -1; int k = 0; for ( int i = 1; i <= N; ++i ) { int v = A[i]; if ( cookie[v] != tajm ) { last[v] = i; cookie[v] = tajm; } else { if ( last[v] > right ) { right = last[v]; right_value = C[i]; // original } last[v] = i; } for ( ;k < Q && end[q[k]] <= i; ++k ) { // printf("k=%d q[k]=%d end=%d right=%d %d\n", k, q[k], end[q[k]], right, right_value); if ( right >= begin[q[k]] ) output[ q[k] ] = right_value; } } for ( int i = 0; i < Q; ++i ) if ( output[i] != -1 ) printf("%d\n", output[i]); else printf("OK\n"); printf("\n"); } return 0; }