rt,已经调傻了
#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
//#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#define y(x) id[x]
#define f(x) x/S
//#define int long long
#pragma GCC optimize("Ofast")
using namespace std;
const int inf=1e9;
char buf[1<<23],*p1=buf,*p2=buf,obuf[1<<23],*O=obuf;
int read(){
int res=0,fs=1; char c=getchar();
while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
return res*fs;
}
void print(int x){
if(x<0) { putchar('-'); x=-x;}
if(x>9) print(x/10);
putchar(x%10+'0');
}
int n,cnt,m,a[2000005],ans,k,tmp,aw[2000005],id[2000005];
struct Q{
int l,r,idx,ans;
}q[2000005];
int S;
bool cmp(Q x,Q y){
return ((y(x.l)^y(y.l))?x.l<y.l:((y(x.l)&1)?x.r<y.r:x.r>y.r));
}
int idx[2000005];
//map<int,int>cnt1,cnt2;
int cnt1[2000005];//x的出现次数
int cnt2[2000005];//有几个数出现了x次
void add(int x){//cnt2->tmp cnt1->cnt
cnt2[cnt1[a[x]]]--;
cnt1[a[x]]++;
cnt2[cnt1[a[x]]]++;
ans=max(ans,cnt1[a[x]]);
}
void del(int x){//tmp cnt2
cnt2[cnt1[a[x]]]--;
if(cnt2[cnt1[a[x]]]==0&&cnt1[a[x]]==ans) ans--;
cnt1[a[x]]--;
cnt2[cnt1[a[x]]]++;
}
signed main() {
// cin>>n;
while(1){
memset(cnt1,0,sizeof(cnt1));
memset(cnt2,0,sizeof(cnt2));
n=read();
if(n==0) break;
S=2135;
m=read();
for(reg i=1;i<=n;i++) id[i]=f(i);
for(reg i=1;i<=n;i++) a[i]=read(),a[i]+=100000;
// cin>>m;
for(reg i=1;i<=m;i++) {
int t1,t2;
t1=read(),t2=read();
q[i]={t1,t2,i,0};
}
sort(q+1,q+m+1,cmp);
reg l=1,r=0;
for(reg i=1;i<=m;i++){
int st=q[i].l,ed=q[i].r;
while(l<st) {
del(l);
++l;
}
while(l>st) {
l--;
add(l);
}
while(r<ed) {
r++;
add(r);
}
while(r>ed) {
del(r);
--r;
}
aw[q[i].idx]=ans;
}
for(reg i=1;i<=m;++i){
cout<<aw[i]<<'\n';
aw[i]=0;
}
ans=0;
memset(cnt1,0,sizeof(cnt1));
memset(cnt2,0,sizeof(cnt2));
}
return 0;
}