#include<bits/stdc++.h>
#define rg register
#define il inline
typedef long long ll;
using namespace std;
ll mod = 1e9+7;
inline ll read() {
ll ans = 0;
char last = ' ', ch = getchar();
while (ch < '0' || ch > '9') last = ch, ch = getchar();
while (ch >= '0' && ch <= '9') ans = ans * 10 + ch - '0', ch = getchar();
if (last == '-') return -ans;
return ans;
}
il ll ksm(ll b,ll k){
ll res=1;
while(k){
if(k&1) res=1ll*res*b%mod;
b=1ll*b*b%mod;k>>=1;
}
return res;
}
int a[100010];
struct node{
int l;
int r;
int id;
int pos;
}q[100010];
inline bool cmp(node &a,node &b){
if(a.pos!=b.pos)return a.pos<b.pos;
else{
if(a.pos%2){
return a.r<b.r;
}
else return a.r>b.r;
}
}
int len;
map<int,int>mp;
int cnt[200020];
int ans[200020];
il void add(int x){
mp[a[x]]++;
}
il void del(int x){
mp[a[x]]--;
if(mp[a[x]]==0)mp.erase(a[x]);
}
int main(){
int n,m;
n=read();
m=read();
for(register int i=1;i<=n;i++){
a[i]=read();
}
len=sqrt(n)+1;
for(register int i=1;i<=m;i++){
q[i].l=read();
q[i].r=read();
q[i].id=i;
q[i].pos=q[i].l/len;
}
sort(q+1,q+n+1,cmp);
register int l=1;
register int r=0;
for(register int i=1;i<=m;i++){
while(q[i].l<l)add(--l);
while(q[i].r>r)add(++r);
while(q[i].l>l)del(l++);
while(q[i].r<r)del(r--);
for(register auto x:mp){
ans[q[i].id]=x.first;
break;
}
}
for(register int i=1;i<=m;i++){
printf("%d ",ans[i]);
}
}