#include <bits/stdc++.h>
using namespace std;
inline int read()
{
int x=0,k=1;
char ch=getchar();
while (ch>'9'||ch<'0'){if(ch=='-')k=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*k;
}
struct node
{
int l,r,p;
}e[200005];
int a[100005],ans[200005],temp,app[200005],num[200005],ti[200005],siz;
inline bool cmp(node s,node s1)
{
if(s.l/siz!=s1.l/siz)return s.l<s1.l;
if((s.l/siz)&1)return s.r<s1.r;
return s.r>s1.r;
}
inline void add(int x)
{
--ti[app[a[x]]];
++app[a[x]];
++ti[app[a[x]]];
if(app[a[x]]>temp)temp=app[a[x]];
}
inline void del(int x)
{
--ti[app[a[x]]];
--app[a[x]];
++ti[app[a[x]]];
if(!ti[app[a[x]]+1]&&temp-1==app[a[x]])--temp;
}
int main()
{
int n=read(),Q=read();
siz=sqrt(n);
for(int i=1;i<=n;++i)num[i]=a[i]=read();
int tot=unique(num+1,num+n+1)-num-1;
for(int i=1;i<=n;++i)a[i]=lower_bound(num+1,num+tot+1,a[i])-num;
for(int i=1;i<=Q;++i){e[i].l=read();e[i].r=read();e[i].p=i;}
sort(e+1,e+Q+1,cmp);
int l=1,r=0;
for(int i=1;i<=Q;++i)
{
int L=e[i].l,R=e[i].r;
while(l<L)del(l++);
while(l>L)add(--l);
while(r<R)add(++r);
while(r>R)del(r--);
ans[e[i].p]=temp;
}
for(int i=1;i<=Q;++i)printf("%d\n",ans[i]);
return 0;
}
为啥会RE(P1997)