#include <bits/stdc++.h>
using namespace std;
int K;
struct as{
int l,r,id;
}ask[300005];
int n,m;
int num[300005],cnt[300005],ans[300005],KK;
bool cmp(as a,as b){
int p1=(a.r-1)/KK+1,p2=(b.r-1)/KK+1;
return p1^p2?p1<p2:(p1&1?a.l>b.l:a.l<b.l);
}
int a[200005];
void add(int x){
if (cnt[a[x]]==0) num[a[x]/K]++;
cnt[a[x]]++;
}
void del(int x){
if (cnt[a[x]]==1) num[a[x]/K]--;
cnt[a[x]]--;
}
int getsum(){
for (register int i=0;i<K;i++){
if (num[i]==K) continue ;
for (register int j=i*K;j<(i+1)*K;j++){
if (cnt[j]==0) return j;
}
}
}
int main(){
cin >> n >> m;
int l=1,r=0;
K=sqrt(n*1.0);
KK=sqrt(m*1.0);
for (register int i=1;i<=n;i++) cin >> a[i];
for (register int i=1;i<=m;i++){
cin >> ask[i].l >> ask[i].r;
ask[i].id=i;
}
sort(ask+1,ask+1+m,cmp);
for (register int i=ask[1].l;i<=ask[1].r;i++) add(i);
l=ask[1].l,r=ask[1].r;
for (register int i=2;i<=m;i++){
while(l<ask[i].l) del(l++);
while(l>ask[i].l) add(--l);
while(r<ask[i].r) add(++r);
while(r>ask[i].r) del(r--);
ans[ask[i].id]=getsum();
}
for (register int i=1;i<=m;i++) cout << ans[i] << '\n';
}