/*=================================*\
Md. Shahidul Islam
CSE, BRUR
Rangpur, Bangladesh
mail: shahidul.cse.brur@gmail.com
FB : fb.com/shahidul.brur
Blog: shahidul-brur.blogspot.com(in Bengali),
shahidul-brur-en.blogspot.com(in English)
\*=================================*/
#include<bits/stdc++.h>
using namespace std;
const int MX = 100002;
int ara[MX];
struct Node
{
int lVal, rVal;
int lCnt, rCnt;
int mxCnt;
}node[4*MX];
void build(int cur, int b, int e)
{
if(b==e)
{
node[cur].lVal = node[cur].rVal = ara[b];
node[cur].lCnt = node[cur].rCnt = node[cur].mxCnt = 1;
return;
}
int m = (b+e)/2;
int L = cur*2;
int R = L+1;
build(L, b, m);
build(R, m+1, e);
node[cur].lVal = node[L].lVal;
node[cur].rVal = node[R].rVal;;
node[cur].lCnt = node[L].lCnt;
node[cur].rCnt = node[R].rCnt;
node[cur].mxCnt = max(node[L].mxCnt,node[R].mxCnt);
if(node[L].rVal==node[R].lVal)
{
node[cur].mxCnt = max(node[cur].mxCnt, node[L].rCnt+node[R].lCnt);
if(node[L].lVal==node[L].rVal)
node[cur].lCnt += node[R].lCnt;
if(node[R].lVal==node[R].rVal)
node[cur].rCnt+=node[L].rCnt;
}
}
int query(int cur, int b, int e, int l, int r)
{
if(r<b || l>e)
return -1;
if(b>=l && e<=r)
{
return node[cur].mxCnt;
}
int m = (b+e)/2;
int L = cur*2;
int R = L+1;
int qL = query(L, b, m, l, r);
int qR = query(R, m+1, e, l, r);
int ans = max(qL, qR);
if(node[L].rVal==node[R].lVal)
{
int lc, rc;
lc = min(m-l+1, node[L].rCnt);
rc = min(r-m, node[R].lCnt);
ans = max(ans, lc+rc);
}
return ans;
}
int main()
{
//freopen("in.txt", "r", stdin);
int n, q;
while(scanf("%d",&n) && n!=0)
{
scanf("%d",&q);
for(int i=1;i<=n;i++)
scanf("%d",&ara[i]);
build(1, 1, n);
while(q--)
{
int l, r;
scanf("%d %d", &l, &r);
int ans = query(1, 1, n, l, r);
printf("%d\n", ans);
}
}
return 0;
}
Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qXAogICAgCQkJCQkJCSAgIAoJICBNZC4gU2hhaGlkdWwgSXNsYW0JCSAgIAoJCSBDU0UsIEJSVVIJCQkJIAoJICBSYW5ncHVyLCBCYW5nbGFkZXNoCQkgIAogbWFpbDogc2hhaGlkdWwuY3NlLmJydXJAZ21haWwuY29tIAogRkIgIDogZmIuY29tL3NoYWhpZHVsLmJydXIJCQogQmxvZzogc2hhaGlkdWwtYnJ1ci5ibG9nc3BvdC5jb20oaW4gQmVuZ2FsaSksCgkgICBzaGFoaWR1bC1icnVyLWVuLmJsb2dzcG90LmNvbShpbiBFbmdsaXNoKSAKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjb25zdCBpbnQgTVggPSAxMDAwMDI7CmludCBhcmFbTVhdOwpzdHJ1Y3QgTm9kZQp7CiAgICBpbnQgbFZhbCwgclZhbDsKICAgIGludCBsQ250LCByQ250OwogICAgaW50IG14Q250Owp9bm9kZVs0Kk1YXTsKdm9pZCBidWlsZChpbnQgY3VyLCBpbnQgYiwgaW50IGUpCnsKICAgIGlmKGI9PWUpCiAgICB7CiAgICAgICAgbm9kZVtjdXJdLmxWYWwgPSBub2RlW2N1cl0uclZhbCA9IGFyYVtiXTsKICAgICAgICBub2RlW2N1cl0ubENudCA9IG5vZGVbY3VyXS5yQ250ID0gbm9kZVtjdXJdLm14Q250ID0gMTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbSA9IChiK2UpLzI7CiAgICBpbnQgTCA9IGN1cioyOwogICAgaW50IFIgPSBMKzE7CiAgICBidWlsZChMLCBiLCBtKTsKICAgIGJ1aWxkKFIsIG0rMSwgZSk7CiAgICBub2RlW2N1cl0ubFZhbCA9IG5vZGVbTF0ubFZhbDsKICAgIG5vZGVbY3VyXS5yVmFsID0gbm9kZVtSXS5yVmFsOzsKICAgIG5vZGVbY3VyXS5sQ250ID0gbm9kZVtMXS5sQ250OwogICAgbm9kZVtjdXJdLnJDbnQgPSBub2RlW1JdLnJDbnQ7CiAgICBub2RlW2N1cl0ubXhDbnQgPSBtYXgobm9kZVtMXS5teENudCxub2RlW1JdLm14Q250KTsKICAgIAogICAgaWYobm9kZVtMXS5yVmFsPT1ub2RlW1JdLmxWYWwpCiAgICB7CiAgICAgICAgbm9kZVtjdXJdLm14Q250ID0gbWF4KG5vZGVbY3VyXS5teENudCwgbm9kZVtMXS5yQ250K25vZGVbUl0ubENudCk7CiAgICAgICAgaWYobm9kZVtMXS5sVmFsPT1ub2RlW0xdLnJWYWwpCiAgICAgICAgICAgIG5vZGVbY3VyXS5sQ250ICs9IG5vZGVbUl0ubENudDsKICAgICAgICBpZihub2RlW1JdLmxWYWw9PW5vZGVbUl0uclZhbCkKICAgICAgICAgICAgbm9kZVtjdXJdLnJDbnQrPW5vZGVbTF0uckNudDsKICAgIH0KfQppbnQgcXVlcnkoaW50IGN1ciwgaW50IGIsIGludCBlLCBpbnQgbCwgaW50IHIpCnsKICAgIGlmKHI8YiB8fCBsPmUpCiAgICAgICAgcmV0dXJuIC0xOwogICAgaWYoYj49bCAmJiBlPD1yKQogICAgewogICAgICAgIHJldHVybiBub2RlW2N1cl0ubXhDbnQ7CiAgICB9CiAgICBpbnQgbSA9IChiK2UpLzI7CiAgICBpbnQgTCA9IGN1cioyOwogICAgaW50IFIgPSBMKzE7CiAgICBpbnQgcUwgPSBxdWVyeShMLCBiLCBtLCBsLCByKTsKICAgIGludCBxUiA9IHF1ZXJ5KFIsIG0rMSwgZSwgbCwgcik7CiAgICBpbnQgYW5zID0gbWF4KHFMLCBxUik7CiAgICBpZihub2RlW0xdLnJWYWw9PW5vZGVbUl0ubFZhbCkKICAgIHsKICAgICAgICBpbnQgbGMsIHJjOwogICAgICAgIGxjID0gbWluKG0tbCsxLCBub2RlW0xdLnJDbnQpOwogICAgICAgIHJjID0gbWluKHItbSwgbm9kZVtSXS5sQ250KTsKICAgICAgICBhbnMgPSBtYXgoYW5zLCBsYytyYyk7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9CmludCBtYWluKCkKewogICAgLy9mcmVvcGVuKCJpbi50eHQiLCAiciIsIHN0ZGluKTsKICAgIGludCBuLCBxOwogICAgd2hpbGUoc2NhbmYoIiVkIiwmbikgJiYgbiE9MCkKICAgIHsKICAgICAgICBzY2FuZigiJWQiLCZxKTsKICAgICAgICBmb3IoaW50IGk9MTtpPD1uO2krKykKICAgICAgICAgICAgc2NhbmYoIiVkIiwmYXJhW2ldKTsKICAgICAgICBidWlsZCgxLCAxLCBuKTsKICAgICAgICB3aGlsZShxLS0pCiAgICAgICAgewogICAgICAgICAgICBpbnQgbCwgcjsKICAgICAgICAgICAgc2NhbmYoIiVkICVkIiwgJmwsICZyKTsKICAgICAgICAgICAgaW50IGFucyA9IHF1ZXJ5KDEsIDEsIG4sIGwsIHIpOwogICAgICAgICAgIHByaW50ZigiJWRcbiIsIGFucyk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIDA7Cn0K