#include<bits/stdc++.h>
using namespace std;
int n,m,idx,a[100005],lg[100005];
int f[100005][20],num[100005],l[100005],r[100005];
void init()
{
lg[0]=-1;
for(int i=1;i<=idx;i++)
{
lg[i]=lg[i/2]+1;
f[i][0]=r[i]-l[i]+1;
}
for(int j=1;j<=lg[idx]+1;j++)
for(int i=1;i+(1<<(j-1))<=idx;i++)
f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
}
int ask(int l,int r)
{
int k=lg[r-l+1];
return max(f[l][k],f[r-(1<<k)+1][k]);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(i==1 || a[i]!=a[i-1])r[++idx]=i,l[idx]=i;//新建一个桶
else r[idx]=i;
num[i]=idx;//存放桶的索引
}
init();//对每个桶中的个数(r-l+1)进行预处理出st表
while(m--)
{
int L,R;
cin>>L>>R;
int x=0,y=0,z=0;
if(num[L]==num[R])z=R-L+1;//在一个桶中
else
{
x=r[num[L]]-L+1,y=R-l[num[R]]+1;//两边的桶
if(num[R]>num[L]+1)z=ask(num[L]+1,num[R]-1);//中间的桶
}
cout<<max({x,y,z})<<endl;
}
system("pause");
return 0;
}