#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int MAXN=5e6+5;
// #define int long long
int a[MAXN],cnt[MAXN];
int bl[MAXN];
int t[MAXN];
struct Q
{
int l;
int r;
int id;
} q[MAXN];
bool cmp(Q a,Q b)
{
return bl[a.l]^bl[b.l]?bl[a.l]<bl[b.l]:bl[a.l]&1?a.r<b.r:a.r>b.r;
}
int ans[MAXN];
void add(int p);
void del(int p);
int now;
int d[MAXN];
signed main()
{
int n,m;
cin>>n>>m;
int bls=sqrt(n);
for (int i=1;i<=n;++i)
scanf("%d",d+i),a[i]=d[i],bl[i]=(i-1)/bls+1;
int size=unique(d+1,d+n+1)-d-1;
for(int i=1;i<=n;++i)
a[i]=lower_bound(d+1,d+size+1,a[i])-d;
for (int i=1;i<=m;++i)
{
scanf("%d %d",&q[i].l,&q[i].r);
q[i].id=i;
}
sort(q+1,q+m+1,cmp);
int l=1,r=0;
for (int i=1;i<=m;++i)
{
int ql=q[i].l,qr=q[i].r;
while (r<qr) add(++r);
while (r>qr) del(r--);
while (l<ql) del(l++);
while (l>ql) add(--l);
ans[q[i].id]=now;
}
for (int i=1;i<=m;++i)
printf("-%d\n",ans[i]);
return 0;
}
void add(int i)
{
t[cnt[a[i]]]--;
t[++cnt[a[i]]]++;
now=max(now,cnt[a[i]]);
}
void del(int i)
{
t[cnt[a[i]]]--;
if(cnt[a[i]]==now&&!t[cnt[a[i]]])now--;
t[--cnt[a[i]]]++;
}
P1997 faebdc 的烦恼 AC