#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
inline int read(){
register int x=0,f=0,ch=getchar();
while('0'>ch||ch>'9')f^=ch=='-',ch=getchar();
while('0'<=ch&&ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=getchar();
return f?-x:x;
}
const int MAX=2e5+5;
int n,m,L;
struct E{
int l,r,id,bl;
inline bool operator <(const E & x)const {return bl==x.bl?r<x.r:l<x.l;}
}e[MAX];
int a[MAX],cl(1),cr;
int tot[MAX],res,ans[MAX];
inline void solve(int x,int v){
if(a[x]<=MAX-5){
tot[a[x]]+=v;
if(tot[a[x]]==0)res=min(res,a[x]);
if(tot[a[x]]&&res==a[x])while(true)if(!tot[++res])break;
}
}
signed main(){
// freopen("in.in","r",stdin);
n=read(),m=read();L=(int)(sqrt(n));
for(register int i=1;i<=n;++i)a[i]=read();
for(register int i=1;i<=m;++i)e[i]=(E){read(),read(),i},e[i].bl=(e[i].l-1)/L+1;
sort(e+1,e+1+m);
// puts("QAQ");
for(register int i=1;i<=m;++i){
while(cl<e[i].l)solve(cl++,-1);
while(cl>e[i].l)solve(--cl,1);
while(cr<e[i].r)solve(++cr,1);
while(cr>e[i].r)solve(cr--,-1);
ans[e[i].id]=res;
}
for(register int i=1;i<=m;++i){
printf("%d\n",ans[i]);
}
return 0;
}