#include <bits/stdc++.h>
#define maxn 500005
using namespace std;
int tmp[maxn];
int a[maxn],cnt[maxn],b[maxn];
int L[710],R[710];
int f[710][710];
vector<int> v[maxn];
int pos[maxn];
inline int max(int a,int b){
return a>b?a:b;
}
int main(){
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int n,m,size,l,r,lastans,block;
cin>>n>>m;
size=sqrt(n);
for(register int i=1;i<=n;i++){
cin>>tmp[i]; a[i]=tmp[i];
}
sort(tmp+1,tmp+n+1);
int len=unique(tmp+1,tmp+n+1)-tmp-1;
for(register int i=1;i<=n;i++){
a[i]=lower_bound(tmp+1,tmp+len+1,a[i])-tmp;
b[i]=(i-1)/size+1;
}
for(register int i=1;i<=n;i++){
v[a[i]].push_back(i);
pos[i]=v[a[i]].size()-1;
}
R[0]=0; block=(n-1)/size+1;
for(int i=1;i<=block;i++){
L[i]=R[i-1]+1; R[i]=i*size;
}R[block]=n;
for(register int i=1;i<=block;i++){
memset(cnt,0,sizeof(cnt));
for(register int j=i;j<=block;j++){
f[i][j]=f[i][j-1];
for(register int k=L[j];k<=R[j];k++)
f[i][j]=max(f[i][j],++cnt[a[k]]);
}
}
memset(cnt,0,sizeof(cnt));
lastans=0;
while(m--){
cin>>l>>r;
l^=lastans; r^=lastans;
lastans=0;
if(b[l]==b[r]){
for(register int i=l;i<=r;i++)
cnt[a[i]]++,lastans=max(lastans,cnt[a[i]]);
for(register int i=l;i<=r;i++) cnt[a[i]]=0;
}
else{
lastans=f[b[l]+1][b[r]-1];
for(register int i=l;i<=R[b[l]];i++){
int it=pos[i];
while(it+lastans<v[a[i]].size()&&v[a[i]][it+lastans]<=r)
lastans++;
}
for(register int i=L[b[r]];i<=r;i++){
int it=pos[i];
while(it-lastans>=0&&v[a[i]][it-lastans]>=l)
lastans++;
}
}
cout<<lastans<<endl;
}
}
啊啊啊写了好几天了,还是0