//思路有限,要不是看了刘汝佳的分析,我这道题目是做不出来的
#include<stdio.h>
#include<string.h>
#include<queue>
#include<cmath>
#include<iostream>
#include<algorithm>
#define MM 211100
#define Max(x,y) x>y?x:y
using namespace std;
int a[MM],value[MM],cnt[MM],num[MM],Left[MM],Right[MM],d[MM][30];//num表示第几个区间段left表示某位置所在区间段的左节点
int n,q;
void RMQ_init(int x)
{
int i,j;
for(i=1;i<=n;i++)
d[i][0]=cnt[i];
for(j=1;(1<<j)<=x;j++)
{
for(i=0;(i+(1<<j)-1)<=x;i++)
d[i][j]=Max(d[i][j-1],d[i+(1<<(j-1))][j-1]);
}
}
int RMQ(int l,int r)
{
int k=0;
if(r<l)return 0;
while((1<<(k+1))<=r-l+1)k++;
return Max(d[l][k],d[r-(1<<k)+1][k]);
}
int main()
{
int i,j,tot;
//freopen("D:\\oo.txt","r",stdin);
while(~scanf("%d",&n)&&n)
{
scanf("%d",&q);
memset(cnt,0,sizeof(cnt));
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
value[1]=a[1];
for(i=1,j=1;i<=n;)
{
int l=i;
while(value[j]==a[i]&&i<=n)
{
cnt[j]++;
num[i]=j;
Left[i]=l;
i++;
//printf("%d\n",Left[i]);
//printf("%d\n",num[i]);
}
// printf("%d %d\n",value[j],cnt[j]);
value[++j]=a[i];
}
tot=j;
int u=0;
for(i=1,j=0;i<=n;j++)
{
u+=cnt[j];
for(int k=1;k<=cnt[j];k++)
{
Right[i++]=u;
//printf("%d\n",Right[i-1]);
}
}
RMQ_init(tot);
// for(i=1;i<=n;i++)
// printf("%d\n",num[i]);
while(q--)
{
int l,r;
scanf("%d%d",&l,&r);
if(num[l]==num[r]){
printf("%d\n",r-l+1);
continue;
}
int ans=Max(RMQ(num[l]+1,num[r]-1),Right[l]-l+1);
printf("%d\n",Max(ans,r-Left[r]+1));
}
}
return 0;
}