#include<bits/stdc++.h>
using namespace std;
int arr[100001];
class Node
{
public:
pair<int,int> pre,suf;
int ans;
} segTree[270000];
void connect(int pos,int a,int b)
{
if(segTree[b].pre.first==segTree[a].pre.first)
segTree[pos].pre={segTree[a].pre.first,segTree[b].pre.second+segTree[a].pre.second};
else
segTree[pos].pre={segTree[a].pre.first,segTree[a].pre.second};
if(segTree[b].suf.first==segTree[a].suf.first)
segTree[pos].suf={segTree[b].suf.first,segTree[b].suf.second+segTree[a].suf.second};
else
segTree[pos].suf={segTree[b].suf.first,segTree[b].suf.second};
if(segTree[a].suf.first==segTree[b].pre.first)
segTree[pos].ans=max(segTree[pos].pre.second,max(segTree[pos].suf.second,segTree[a].suf.second+segTree[b].pre.second));
else
segTree[pos].ans=max(segTree[pos].pre.second,segTree[pos].suf.second);
}
void maketree(int low,int high,int pos)
{
if(low==high){
segTree[pos].pre= {arr[low],1};
segTree[pos].suf= {arr[low],1};
segTree[pos].ans=1;
return;
}
int mid=(low+high)/2;
maketree(low,mid,2*pos+1);
maketree(mid+1,high,2*pos+2);
connect(pos,2*pos+1,2*pos+2);
}
Node jointhem(Node temp1,Node temp2)
{
if(temp1.ans==0)
return temp2;
Node temp;
if(temp2.pre.first==temp1.pre.first)
temp.pre={temp1.pre.first,temp2.pre.second+temp1.pre.second};
else
temp.pre={temp1.pre.first,temp1.pre.second};
if(temp2.suf.first==temp1.suf.first)
temp.suf={temp2.suf.first,temp2.suf.second+temp1.suf.second};
else
temp.suf={temp2.suf.first,temp2.suf.second};
if(temp1.suf.first==temp2.pre.first)
temp.ans=max(temp.pre.second,max(temp.suf.second,temp1.suf.second+temp2.pre.second));
else
temp.ans=max(temp.pre.second,temp.suf.second);
return temp;
}
Node query(int low,int high,int qlow,int qhigh,int pos)
{
if(high<qlow || low>qhigh){
Node temp;
temp.pre={0,0},temp.suf={0,0},temp.ans=0;
return temp;
}
if(low>=qlow && high<=qhigh)
return segTree[pos];
int mid=(low+high)/2;
Node temp1=query(low,mid,qlow,qhigh,2*pos+1);
Node temp2=query(mid+1,high,qlow,qhigh,2*pos+2);
return jointhem(temp1,temp2);
}
int main()
{
int n,q,i,j,temp;
while(cin>>n){
if(n==0)
return 0;
cin>>q;
temp=2*((int)(pow(2,ceil(log2(100001)))+0.5))-1;
for(i=0; i<n; i++)
cin>>arr[i];
maketree(0,n-1,0);
int a,b;
Node temp;
for(i=0;i<q;i++){
cin>>a>>b;
temp=query(0,n-1,a-1,b-1,0);
cout<<temp.ans<<endl;
}
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IGFyclsxMDAwMDFdOwpjbGFzcyBOb2RlCnsKcHVibGljOgogICAgcGFpcjxpbnQsaW50PiBwcmUsc3VmOwogICAgaW50IGFuczsKfSBzZWdUcmVlWzI3MDAwMF07CnZvaWQgY29ubmVjdChpbnQgcG9zLGludCBhLGludCBiKQp7CiAgICBpZihzZWdUcmVlW2JdLnByZS5maXJzdD09c2VnVHJlZVthXS5wcmUuZmlyc3QpCiAgICAgICAgc2VnVHJlZVtwb3NdLnByZT17c2VnVHJlZVthXS5wcmUuZmlyc3Qsc2VnVHJlZVtiXS5wcmUuc2Vjb25kK3NlZ1RyZWVbYV0ucHJlLnNlY29uZH07CiAgICBlbHNlCiAgICAgICAgc2VnVHJlZVtwb3NdLnByZT17c2VnVHJlZVthXS5wcmUuZmlyc3Qsc2VnVHJlZVthXS5wcmUuc2Vjb25kfTsKICAgIGlmKHNlZ1RyZWVbYl0uc3VmLmZpcnN0PT1zZWdUcmVlW2FdLnN1Zi5maXJzdCkKICAgICAgICBzZWdUcmVlW3Bvc10uc3VmPXtzZWdUcmVlW2JdLnN1Zi5maXJzdCxzZWdUcmVlW2JdLnN1Zi5zZWNvbmQrc2VnVHJlZVthXS5zdWYuc2Vjb25kfTsKICAgIGVsc2UKICAgICAgICBzZWdUcmVlW3Bvc10uc3VmPXtzZWdUcmVlW2JdLnN1Zi5maXJzdCxzZWdUcmVlW2JdLnN1Zi5zZWNvbmR9OwogICAgaWYoc2VnVHJlZVthXS5zdWYuZmlyc3Q9PXNlZ1RyZWVbYl0ucHJlLmZpcnN0KQogICAgICAgIHNlZ1RyZWVbcG9zXS5hbnM9bWF4KHNlZ1RyZWVbcG9zXS5wcmUuc2Vjb25kLG1heChzZWdUcmVlW3Bvc10uc3VmLnNlY29uZCxzZWdUcmVlW2FdLnN1Zi5zZWNvbmQrc2VnVHJlZVtiXS5wcmUuc2Vjb25kKSk7CiAgICBlbHNlCiAgICAgICAgc2VnVHJlZVtwb3NdLmFucz1tYXgoc2VnVHJlZVtwb3NdLnByZS5zZWNvbmQsc2VnVHJlZVtwb3NdLnN1Zi5zZWNvbmQpOwp9CnZvaWQgbWFrZXRyZWUoaW50IGxvdyxpbnQgaGlnaCxpbnQgcG9zKQp7CiAgICBpZihsb3c9PWhpZ2gpewogICAgICAgIHNlZ1RyZWVbcG9zXS5wcmU9IHthcnJbbG93XSwxfTsKICAgICAgICBzZWdUcmVlW3Bvc10uc3VmPSB7YXJyW2xvd10sMX07CiAgICAgICAgc2VnVHJlZVtwb3NdLmFucz0xOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBtaWQ9KGxvdytoaWdoKS8yOwogICAgbWFrZXRyZWUobG93LG1pZCwyKnBvcysxKTsKICAgIG1ha2V0cmVlKG1pZCsxLGhpZ2gsMipwb3MrMik7CiAgICBjb25uZWN0KHBvcywyKnBvcysxLDIqcG9zKzIpOwp9Ck5vZGUgam9pbnRoZW0oTm9kZSB0ZW1wMSxOb2RlIHRlbXAyKQp7CiAgICBpZih0ZW1wMS5hbnM9PTApCiAgICAgICAgcmV0dXJuIHRlbXAyOwogICAgTm9kZSB0ZW1wOwogICAgaWYodGVtcDIucHJlLmZpcnN0PT10ZW1wMS5wcmUuZmlyc3QpCiAgICAgICAgdGVtcC5wcmU9e3RlbXAxLnByZS5maXJzdCx0ZW1wMi5wcmUuc2Vjb25kK3RlbXAxLnByZS5zZWNvbmR9OwogICAgZWxzZQogICAgICAgIHRlbXAucHJlPXt0ZW1wMS5wcmUuZmlyc3QsdGVtcDEucHJlLnNlY29uZH07CiAgICBpZih0ZW1wMi5zdWYuZmlyc3Q9PXRlbXAxLnN1Zi5maXJzdCkKICAgICAgICB0ZW1wLnN1Zj17dGVtcDIuc3VmLmZpcnN0LHRlbXAyLnN1Zi5zZWNvbmQrdGVtcDEuc3VmLnNlY29uZH07CiAgICBlbHNlCiAgICAgICAgdGVtcC5zdWY9e3RlbXAyLnN1Zi5maXJzdCx0ZW1wMi5zdWYuc2Vjb25kfTsKICAgIGlmKHRlbXAxLnN1Zi5maXJzdD09dGVtcDIucHJlLmZpcnN0KQogICAgICAgIHRlbXAuYW5zPW1heCh0ZW1wLnByZS5zZWNvbmQsbWF4KHRlbXAuc3VmLnNlY29uZCx0ZW1wMS5zdWYuc2Vjb25kK3RlbXAyLnByZS5zZWNvbmQpKTsKICAgIGVsc2UKICAgICAgICB0ZW1wLmFucz1tYXgodGVtcC5wcmUuc2Vjb25kLHRlbXAuc3VmLnNlY29uZCk7CiAgICByZXR1cm4gdGVtcDsKfQpOb2RlIHF1ZXJ5KGludCBsb3csaW50IGhpZ2gsaW50IHFsb3csaW50IHFoaWdoLGludCBwb3MpCnsKICAgIGlmKGhpZ2g8cWxvdyB8fCBsb3c+cWhpZ2gpewogICAgICAgIE5vZGUgdGVtcDsKICAgICAgICB0ZW1wLnByZT17MCwwfSx0ZW1wLnN1Zj17MCwwfSx0ZW1wLmFucz0wOwogICAgICAgIHJldHVybiB0ZW1wOwogICAgfQogICAgaWYobG93Pj1xbG93ICYmIGhpZ2g8PXFoaWdoKQogICAgICAgIHJldHVybiBzZWdUcmVlW3Bvc107CiAgICBpbnQgbWlkPShsb3craGlnaCkvMjsKICAgIE5vZGUgdGVtcDE9cXVlcnkobG93LG1pZCxxbG93LHFoaWdoLDIqcG9zKzEpOwogICAgTm9kZSB0ZW1wMj1xdWVyeShtaWQrMSxoaWdoLHFsb3cscWhpZ2gsMipwb3MrMik7CiAgICByZXR1cm4gam9pbnRoZW0odGVtcDEsdGVtcDIpOwp9CmludCBtYWluKCkKewogICAgaW50IG4scSxpLGosdGVtcDsKICAgIHdoaWxlKGNpbj4+bil7CiAgICAgICAgaWYobj09MCkKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgY2luPj5xOwogICAgICAgIHRlbXA9MiooKGludCkocG93KDIsY2VpbChsb2cyKDEwMDAwMSkpKSswLjUpKS0xOwogICAgICAgIGZvcihpPTA7IGk8bjsgaSsrKQogICAgICAgICAgICBjaW4+PmFycltpXTsKICAgICAgICBtYWtldHJlZSgwLG4tMSwwKTsKICAgICAgICBpbnQgYSxiOwogICAgICAgIE5vZGUgdGVtcDsKICAgICAgICBmb3IoaT0wO2k8cTtpKyspewogICAgICAgICAgICBjaW4+PmE+PmI7CiAgICAgICAgICAgIHRlbXA9cXVlcnkoMCxuLTEsYS0xLGItMSwwKTsKICAgICAgICAgICAgY291dDw8dGVtcC5hbnM8PGVuZGw7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0K