#include<bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
struct node
{
int Max; // maximum frequency
int prefixcount; // prefix of left element of array
int prefixnum; // left element of interval
int suffixcount; // right element freq
int suffixnum; // right element of interval
};
typedef vector<node> vn;
node merge(node left, node right)
{
node p;
if(left.suffixnum == right.prefixnum)
{
p.Max = max(left.Max, max(right.Max, left.suffixcount+right.prefixcount));
if(left.prefixnum == left.suffixnum)
p.prefixcount = left.prefixcount + right.prefixcount;
else
p.prefixcount = left.prefixcount;
if(right.prefixnum == right.suffixnum)
p.suffixcount = left.suffixcount + right.suffixcount;
else
p.suffixcount = right.suffixcount;
}
else
{
p.Max = max(left.Max, right.Max);
p.suffixcount = right.suffixcount;
p.prefixcount = left.prefixcount;
}
p.prefixnum = left.prefixnum;
p.suffixnum = right.suffixnum;
return p;
}
node constTree(vn& tree, const vi& arr, int ss, int se, int si)
{
if(ss==se)
{
tree[si].Max = tree[si].prefixcount = tree[si].suffixcount = 1;
tree[si].prefixnum = tree[si].suffixnum = arr[ss];
return tree[si];
}
int mid = ss + (se-ss)/2;
node left = constTree(tree, arr, ss, mid, 2*si+1);
node right = constTree(tree, arr, mid+1, se, 2*si+2);
tree[si] = merge(left, right);
return tree[si];
}
node query(const vn& tree, const vi& arr, int ss, int se, int qs, int qe, int si)
{
node p;
if(qs>se || qe<ss)
return p;
else if(qs<=ss && qe>=se)
return tree[si];
int mid = ss + (se-ss)/2;
if(qe<=mid)
return query(tree, arr, ss, mid, qs, qe, 2*si+1);
else if(mid<qs)
return query(tree, arr, mid+1, se, qs, qe, 2*si+2);
node left = query(tree, arr, ss, mid, qs, qe, 2*si+1);
node right = query(tree, arr, mid+1, se, qs, qe, 2*si+2);
return merge(left, right);
}
int main()
{
int n, q, l, r;
scanf("%d %d", &n, &q);
vi arr(n);
for(int i=0; i<n; i++)
scanf("%d", &arr[i]);
vn tree(4*n);
constTree(tree, arr, 0, n-1, 0);
while(q--)
{
scanf("%d %d", &l, &r);
node p = query(tree, arr, 0, n-1, l-1, r-1, 0);
printf("%d\n", p.Max);
}
// scanf("%d", &l);
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKCnN0cnVjdCBub2RlCnsKICAgIGludCBNYXg7IC8vIG1heGltdW0gZnJlcXVlbmN5CiAgICBpbnQgcHJlZml4Y291bnQ7IC8vIHByZWZpeCBvZiBsZWZ0IGVsZW1lbnQgb2YgYXJyYXkKICAgIGludCBwcmVmaXhudW07IC8vIGxlZnQgZWxlbWVudCBvZiBpbnRlcnZhbAogICAgaW50IHN1ZmZpeGNvdW50OyAvLyByaWdodCBlbGVtZW50IGZyZXEKICAgIGludCBzdWZmaXhudW07IC8vIHJpZ2h0IGVsZW1lbnQgb2YgaW50ZXJ2YWwKfTsKCnR5cGVkZWYgdmVjdG9yPG5vZGU+IHZuOwoKbm9kZSBtZXJnZShub2RlIGxlZnQsIG5vZGUgcmlnaHQpCnsKICAgIG5vZGUgcDsKICAgIGlmKGxlZnQuc3VmZml4bnVtID09IHJpZ2h0LnByZWZpeG51bSkKICAgIHsKICAgICAgICBwLk1heCA9IG1heChsZWZ0Lk1heCwgbWF4KHJpZ2h0Lk1heCwgbGVmdC5zdWZmaXhjb3VudCtyaWdodC5wcmVmaXhjb3VudCkpOwogICAgICAgIGlmKGxlZnQucHJlZml4bnVtID09IGxlZnQuc3VmZml4bnVtKQogICAgICAgICAgICBwLnByZWZpeGNvdW50ID0gbGVmdC5wcmVmaXhjb3VudCArIHJpZ2h0LnByZWZpeGNvdW50OwogICAgICAgIGVsc2UKICAgICAgICAgICAgcC5wcmVmaXhjb3VudCA9IGxlZnQucHJlZml4Y291bnQ7CiAgICAgICAgaWYocmlnaHQucHJlZml4bnVtID09IHJpZ2h0LnN1ZmZpeG51bSkKICAgICAgICAgICAgcC5zdWZmaXhjb3VudCA9IGxlZnQuc3VmZml4Y291bnQgKyByaWdodC5zdWZmaXhjb3VudDsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHAuc3VmZml4Y291bnQgPSByaWdodC5zdWZmaXhjb3VudDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBwLk1heCA9IG1heChsZWZ0Lk1heCwgcmlnaHQuTWF4KTsKICAgICAgICBwLnN1ZmZpeGNvdW50ID0gcmlnaHQuc3VmZml4Y291bnQ7CiAgICAgICAgcC5wcmVmaXhjb3VudCA9IGxlZnQucHJlZml4Y291bnQ7CiAgICB9CiAgICBwLnByZWZpeG51bSA9IGxlZnQucHJlZml4bnVtOwogICAgcC5zdWZmaXhudW0gPSByaWdodC5zdWZmaXhudW07CiAgICByZXR1cm4gcDsKfQoKbm9kZSBjb25zdFRyZWUodm4mIHRyZWUsIGNvbnN0IHZpJiBhcnIsIGludCBzcywgaW50IHNlLCBpbnQgc2kpCnsKICAgIGlmKHNzPT1zZSkKICAgIHsKICAgICAgICB0cmVlW3NpXS5NYXggPSB0cmVlW3NpXS5wcmVmaXhjb3VudCA9IHRyZWVbc2ldLnN1ZmZpeGNvdW50ID0gMTsKICAgICAgICB0cmVlW3NpXS5wcmVmaXhudW0gPSB0cmVlW3NpXS5zdWZmaXhudW0gPSBhcnJbc3NdOwogICAgICAgIHJldHVybiB0cmVlW3NpXTsKICAgIH0KICAgIGludCBtaWQgPSBzcyArIChzZS1zcykvMjsKICAgIG5vZGUgbGVmdCA9IGNvbnN0VHJlZSh0cmVlLCBhcnIsIHNzLCBtaWQsIDIqc2krMSk7CiAgICBub2RlIHJpZ2h0ID0gY29uc3RUcmVlKHRyZWUsIGFyciwgbWlkKzEsIHNlLCAyKnNpKzIpOwogICAgdHJlZVtzaV0gPSBtZXJnZShsZWZ0LCByaWdodCk7CiAgICByZXR1cm4gdHJlZVtzaV07Cn0KCm5vZGUgcXVlcnkoY29uc3Qgdm4mIHRyZWUsIGNvbnN0IHZpJiBhcnIsIGludCBzcywgaW50IHNlLCBpbnQgcXMsIGludCBxZSwgaW50IHNpKQp7CiAgICBub2RlIHA7CiAgICBpZihxcz5zZSB8fCBxZTxzcykKICAgICAgICByZXR1cm4gcDsKICAgIGVsc2UgaWYocXM8PXNzICYmIHFlPj1zZSkKICAgICAgICByZXR1cm4gdHJlZVtzaV07CiAgICBpbnQgbWlkID0gc3MgKyAoc2Utc3MpLzI7CiAgICBpZihxZTw9bWlkKQogICAgICAgIHJldHVybiBxdWVyeSh0cmVlLCBhcnIsIHNzLCBtaWQsIHFzLCBxZSwgMipzaSsxKTsKICAgIGVsc2UgaWYobWlkPHFzKQogICAgICAgIHJldHVybiBxdWVyeSh0cmVlLCBhcnIsIG1pZCsxLCBzZSwgcXMsIHFlLCAyKnNpKzIpOwogICAgbm9kZSBsZWZ0ID0gcXVlcnkodHJlZSwgYXJyLCBzcywgbWlkLCBxcywgcWUsIDIqc2krMSk7CiAgICBub2RlIHJpZ2h0ID0gcXVlcnkodHJlZSwgYXJyLCBtaWQrMSwgc2UsIHFzLCBxZSwgMipzaSsyKTsKICAgIHJldHVybiBtZXJnZShsZWZ0LCByaWdodCk7Cn0KCgppbnQgbWFpbigpCnsKICAgIGludCBuLCBxLCBsLCByOwogICAgc2NhbmYoIiVkICVkIiwgJm4sICZxKTsKICAgIHZpIGFycihuKTsKICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKykKICAgICAgICBzY2FuZigiJWQiLCAmYXJyW2ldKTsKICAgIHZuIHRyZWUoNCpuKTsKICAgIGNvbnN0VHJlZSh0cmVlLCBhcnIsIDAsIG4tMSwgMCk7CiAgICB3aGlsZShxLS0pCiAgICB7CiAgICAgICAgc2NhbmYoIiVkICVkIiwgJmwsICZyKTsKICAgICAgICBub2RlIHAgPSBxdWVyeSh0cmVlLCBhcnIsIDAsIG4tMSwgbC0xLCByLTEsIDApOwogICAgICAgIHByaW50ZigiJWRcbiIsIHAuTWF4KTsKICAgIH0KICAgIC8vIHNjYW5mKCIlZCIsICZsKTsKfQ==