#include<iostream>
#include<vector>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
#define int long long
int n,q;
int v[100010];
int d[100010];
int ord[100010],orz[100010];
int il,ir;
int s[100010];
int al[100010],ar[100010],ak[100010];
int b;
int bl[100010];
map<int,int> c,dd;
bool cmp(int x,int y)
{
return d[x]<d[y];
}
bool cmp2(int x,int y)
{
if(al[x]/b!=al[y]/b)
{
return al[x]<al[y];
}
return (((al[x]/b)&1) ? (ar[x]<ar[y]) : (ar[x]>ar[y]));
}
vector<int>id[100010],id2[100010];
int ds;
int rc[100010],rd[100010];
signed main()
{
cin>>n>>q;
b=sqrt(n);
for(int i=1;i<=n;i++)
{
cin>>v[i];
if(!c[v[i]])
{
dd[v[i]]=++ds;
id2[ds].push_back(0);
}
c[v[i]]++;
rc[i]=c[v[i]];
rd[i]=dd[v[i]];
id[rd[i]].push_back(v[i]*rc[i]);
d[i]=v[i]*rc[i];
ord[i]=i;
}
sort(ord+1,ord+n+1,cmp);
for(int i=1;i<=n;i++)
{
id2[rd[ord[i]]].push_back(i);
}
for(int i=1;i<=q;i++)
{
cin>>al[i]>>ar[i];
orz[i]=i;
}
sort(orz+1,orz+q+1,cmp2);
il=1;
ir=0;
for(int k=1;k<=q;k++)
{
int tl=al[orz[k]],tr=ar[orz[k]];
while(tl<il)
{
il--;
s[rd[il]]++;
bl[id2[rd[il]][s[rd[il]]-1]/b]--;
bl[id2[rd[il]][s[rd[il]]]/b]++;
}
while(ir<tr)
{
ir++;
s[rd[ir]]++;
bl[id2[rd[ir]][s[rd[ir]]-1]/b]--;
bl[id2[rd[ir]][s[rd[ir]]]/b]++;
}
while(tl>il)
{
s[rd[il]]--;
bl[id2[rd[il]][s[rd[il]]+1]/b]--;
bl[id2[rd[il]][s[rd[il]]]/b]++;
il++;
}
while(ir>tr)
{
s[rd[ir]]--;
bl[id2[rd[ir]][s[rd[ir]]+1]/b]--;
bl[id2[rd[ir]][s[rd[ir]]]/b]++;
ir--;
}
for(int i=n/b;i>=0;i--)
{
if(bl[i])
{
for(int j=i*b+b-1;j>=i*b;j--)
{
//cout<<ord[j]<<' '<<s[rd[ord[j]]]<<' '<<rc[ord[j]]<<endl;
if(!rd[ord[j]])
{
continue;
}
if(s[rd[ord[j]]]==rc[ord[j]])
{
ak[orz[k]]=d[ord[j]];
break;
}
}
break;
}
}
//cout<<tl<<' '<<tr<<' '<<ak[orz[k]]<<endl;
}
for(int i=1;i<=q;i++)
{
cout<<ak[i]<<endl;
}
return 0;
}
爆零了(