rt
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,q;
int a[N];
int belong[N];
int cnt[N],num,sum[N];
int L,R;
int query[N];
vector<int> v;
struct ask{
int l,r;
int id;
bool operator <(ask &b){
if(belong[l]==belong[b.l]) return r<b.r;
return belong[l]<belong[b.l];
}
}b[N];
void add(int x){
sum[++cnt[a[x]]]++;
if(cnt[a[x]]>num) num=cnt[a[x]];
}
void del(int x){
if(sum[cnt[a[x]]]==1&&num==cnt[a[x]]) num--;
sum[cnt[a[x]]--]--;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(nullptr);
L=1;
cin>>n>>q;
for(int i=1;i<=n;i++) belong[i]=i/sqrt(n);
for(int i=1;i<=n;i++){
cin>>a[i];
v.push_back(a[i]);
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()));
for(int i=1;i<=n;i++){
a[i]=lower_bound(v.begin(),v.end(),a[i])-v.begin()+1;
}
for(int i=1;i<=q;i++){
cin>>b[i].l>>b[i].r;
b[i].id=i;
}
sort(b+1,b+q+1);
for(int i=1;i<=q;i++){
while(L<b[i].l) del(L++);
while(L>b[i].l) add(--L);
while(R<b[i].r) add(++R);
while(R>b[i].r) del(R--);
query[b[i].id]=num;
}
for(int i=1;i<=q;i++) cout<<-query[i]<<endl;
return 0;
}