#include<cstdio>
#include<set>
#include<algorithm>

using namespace std;

#define REP(i,n) for(int i = 0; i < (n); ++i)
#define FOR(i,a,b) for(int i = (a); i < (b); ++i)
#define MP make_pair
#define ST first
#define ND second

#define MR 1000010

int res[MR], id[MR];
pair < pair < int, bool >, int > event[2*MR]; //ostatni jest identyfikatorem query
set < int > idS;
set < pair < int, int > > qS;
int beg[MR];  //poczatki zdarzen

int main()
{
  int M, Q;
  while(true)
  {
    scanf("%d%d", &M, &Q);
    if(!M)
      break;
    REP(i,M)
        scanf("%d", &id[i]);
    REP(i,Q)
    {
      int a, b;
      scanf("%d%d", &a,&b);a--;b--;
      event[i].ST.ST=a;
      event[i].ST.ND=1; //poczatek
      event[i].ND = i;  //nr query
      event[Q+i].ST.ST=b;
      event[Q+i].ST.ND=0; //koniec
      event[Q+i].ND = i;  //nr query
      beg[i] = a;
    }
    REP(i,Q)  //poczatkowo zakladamy, ze nie ma powtorek
        res[i] = -1;
    sort(event,event+2*Q);
    int wsk = 0; //wskaznik na tablice event
    int wsk1 = 0; //wskaznik na tablice id
    event[2*Q].ST.ST = 2000000000;
    REP(i,M)
    {
      //spr czy jest duplikat
      if(!idS.empty() && idS.find(id[i]) != idS.end())  //jest duplikat
      {
        //odznaczaj dla kolejnych query
        while(!qS.empty())
        {
          set < pair < int, int > > :: iterator it = qS.begin();
          if(idS.empty() || idS.find(id[i]) == idS.end()) //koniec duplikatow
            break;
          res[it->ND] = id[i];  //to jest duplikat
          qS.erase(it);         //wyrzuc query
          if(qS.empty())
            break;
          it = qS.begin();      //wyrzuc id do tego poczatku          
          FOR(j,wsk1,it->ST)
            idS.erase(id[j]);
          wsk1 = it->ST;
        }
      }
      //spr koniec
      while(!event[wsk].ST.ND && event[wsk].ST.ST == i)  //mamy koniec        
      {
        if(!qS.empty()) //usun poczatek
          qS.erase(MP(beg[event[wsk].ND],event[wsk].ND));
        wsk++;
      }
          
      //spr poczatek
      while(event[wsk].ST.ND && event[wsk].ST.ST == i)  //mamy poczatek          
      {
        qS.insert(MP(beg[event[wsk].ND],event[wsk].ND));
        wsk++;
      }
      //usun id do aktualnego poczatku
      if(qS.empty())
      {
        idS.clear();
        wsk1 = i;
      }      
      else
      {
        set < pair < int, int > > :: iterator it = qS.begin();
        FOR(j,wsk1,it->ST)
          idS.erase(id[j]);
        wsk1 = it->ST;      
      }
      idS.insert(id[i]);
    }
    REP(i,Q)
        if(res[i] == -1)
          printf("OK\n");
        else
          printf("%d\n", res[i]);
    printf("\n");      
    qS.clear();
    idS.clear();
  }
  return 0;
}