#include<bits/stdc++.h>
using namespace std;
int a[100005],b[100005],preb[100005];
int mx[100005][25];
int g(int d){
int cnt=0;
while(d>1){
cnt++;
d/=2;
}
return cnt;
}
int main(){
int n,q;
scanf("%d%d",&n,&q);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
int cnt=1,pos=0;
for(int i=1;i<n;i++){
if(a[i]!=a[i-1]){
b[pos++]=cnt;
cnt=0;
}
cnt++;
}
b[pos++]=cnt;
for(int i=0;i<pos;i++)mx[i][0]=b[i];
for(int j=1;j<20;j++){
for(int i=0;i<=pos-(1<<j);i++)mx[i][j]=max(mx[i][j-1],mx[i+(1<<j)][j-1]);
}
preb[0]=b[0];
for(int i=1;i<pos;i++)preb[i]=preb[i-1]+b[i];
for(int i=0;i<q;i++){
int x,y;
scanf("%d%d",&x,&y);
int l=lower_bound(preb,preb+pos,x)-preb+1;
int r=lower_bound(preb,preb+pos,y)-preb-1;
int s=g(r-l);
if(l-2==r)printf("%d",y-x+1);
else if(l-1==r)printf("%d",max(preb[r]-x+1,y-preb[r]));
else printf("%d",max(max(mx[l][s],mx[r-(1<<s)+1][s]),max(preb[l-1]-x,y-preb[r])));
printf("\n");
}
return 0;
}