1 #include <bits/stdc++.h>
2 using namespace std;
3
4 #define CLR(m,a) memset(m,a,sizeof(m))
5
6 const int maxn=100010;
7 int val[maxn],cnt[maxn];
8 int num[maxn],Left[maxn],Right[maxn];
9 int n,m;
10 int sz;
11 int d[maxn][25];
12
13 void RMQ_init(int n){
14 for(int i=0;i<n;i++) d[i][0]=cnt[i];
15 for(int j=1;(1<<j)<=n;j++)
16 for(int i=0;i+(1<<j)-1<n;i++){
17 d[i][j]=max(d[i][j-1],d[i+(1<<j-1)][j-1]);
18 }
19 }
20 int RMQ(int L,int R){
21 int k=0;
22 while(1<<(k+1)<=R-L+1) k++;
23 return max(d[L][k],d[R-(1<<k)+1][k]);
24 }
25 int main()
26 {
27 while(scanf("%d",&n)==1&&n){
28 scanf("%d",&m);
29 sz=0;
30 int s,e;
31 CLR(cnt,0);
32 scanf("%d",&s);
33 Left[0]=0;
34 num[0]=0;
35 val[0]=s;
36 cnt[0]=1;
37 int f=0;
38 for(int i=1;i<n;i++){
39 scanf("%d",&e);
40 if(e==s){
41 num[i]=sz;
42 cnt[sz]++;
43 Left[i]=f;
44 }else{
45 for(int j=f;j<i;j++) Right[j]=i-1;
46 sz++;
47 val[sz]=e;
48 cnt[sz]=1;
49 num[i]=sz;
50 Left[i]=i;
51 Right[i]=i;
52 f=i; //记录最左的位置
53 s=e;
54 }
55 }
56 RMQ_init(sz+1);
57 while(m--){
58 int a,b;
59 scanf("%d%d",&a,&b);
60 a--;b--;
61 int ans=0;
62 if(num[a]!=num[b]){
63 ans=max(Right[a]-a+1,b-Left[b]+1);
64 a=num[a]+1;
65 b=num[b]-1;
66 if(a<=b) ans=max(ans,RMQ(a,b));
67 }else
68 ans=b-a+1;
69 printf("%d
",ans);
70 }
71 }
72 return 0;
73 }