/// Author : Nguyễn Thái Sơn - Ti20 - THPT chuyên Lương Thế Vinh
#include<bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/trie_policy.hpp>
//#include <ext/rope>
//#pragma GCC optimize("Ofast")
//#pragma GCC optimization("unroll-loops, no-stack-protector")
//#pragma GCC target("avx,avx2,fma")
//using namespace std;
//using namespace __gnu_pbds;
//using namespace __gnu_cxx;
#define fi first
#define se second
#define TASK "test"
#define pb push_back
#define EL cout << endl
#define Ti20_ntson int main()
#define in(x) cout << x << endl
#define all(x) (x).begin(),(x).end()
#define getbit(x, i) (((x) >> (i)) & 1)
#define cntbit(x) __builtin_popcount(x)
#define FOR(i,l,r) for (int i = l; i <= r; i++)
#define FORD(i,l,r) for (int i = l; i >= r; i--)
#define Debug(a,n) for (int i = 1; i <= n; i++) cout << a[i] << " "; cout << endl
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> vii;
typedef unsigned long long ull;
typedef vector<vector<int>> vvi;
const int N = 2e5 + 5;
const int oo = INT_MAX;
const int mod = 1e9 + 7;
const int d4x[4] = {-1, 0, 1, 0} , d4y[4] = {0, 1, 0, -1};
const int d8x[8] = {-1, -1, 0, 1, 1, 1, 0, -1}, d8y[8] = {0, 1, 1, 1, 0, -1, -1, -1};
const int Bl = 333;
struct Query {
int l, r, id;
bool operator < (const Query &T) const {
if (l / Bl != T.l / Bl)
return l / Bl < T.l / Bl;
return r < T.r;
}
}a[N];
int n, m, Val[N], c[N], mn[N], mx[N], Ans[N], Ans1, Ans2, mnBl[N], mxBl[N];
inline void Read_Input() {
cin >> n >> m;
FOR(i, 1, n)
cin >> Val[i];
FOR(i, 1, m)
cin >> a[i].l >> a[i].r, a[i].id = i, a[i].l--;
sort(a + 1, a + m + 1);
}
unordered_map<int, int> mp[N];
void Build() {
c[0] = 1;
int cnt = 1;
FOR(i, 1, n) {
int res = c[i - 1];
auto it = mp[res].find(-Val[i]);
if (it != mp[res].end())
c[i] = c[(*it).se - 1];
else c[i] = ++cnt;
mp[c[i]][Val[i]] = i;
// cout << c[i] << " ";
}
// cout << '\n';
}
void Add(int id) {
if (mn[c[id]] == -1) mn[c[id]] = id; mn[c[id]] = min(mn[c[id]], id);
if (mx[c[id]] == -1) mx[c[id]] = id; mx[c[id]] = max(mx[c[id]], id);
Ans1 = max(Ans1, mx[c[id]] - mn[c[id]]);
}
void AddBl(int id) {
if (mnBl[c[id]] == -1) mnBl[c[id]] = id; mnBl[c[id]] = min(mnBl[c[id]], id);
if (mxBl[c[id]] == -1) mxBl[c[id]] = id; mxBl[c[id]] = max(mxBl[c[id]], id);
Ans2 = max(Ans2, mxBl[c[id]] - mnBl[c[id]]);
Ans2 = max(Ans2, mx[c[id]] - mnBl[c[id]]);
}
inline void Solve() {
Build();
int Le, Ri;
int ct;
FOR(i, 1, m) {
if ((i == 1) || (a[i].l / Bl != a[i - 1].l / Bl)) {
FOR(j, 1, n + 1)
mn[j] = -1, mx[j] = -1;
Le = a[i].l / Bl * Bl;
Ri = min(n, Le + Bl - 1);
Ans1 = 0;
FOR(j, Ri + 1, a[i].r)
Add(j);
ct = max(a[i].r, Ri);
}
Ans2 = 0;
FOR(j, Le, Ri)
mnBl[c[j]] = -1, mxBl[c[j]] = -1;
while (ct < a[i].r)
Add(++ct);
FOR(j, a[i].l, min(Ri, a[i].r))
AddBl(j);
Ans[a[i].id] = max(Ans1, Ans2);
}
FOR(i, 1, m)
cout << Ans[i] << '\n';
}
Ti20_ntson {
// freopen(TASK".INP","r",stdin);
// freopen(TASK".OUT","w",stdout);
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int T = 1;
while (T -- ) {
Read_Input();
Solve();
}
}
Ly8vIEF1dGhvciA6IE5ndXnhu4VuIFRow6FpIFPGoW4gLSBUaTIwIC0gVEhQVCBjaHV5w6puIEzGsMahbmcgVGjhur8gVmluaAoKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KLy8jaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+Ci8vI2luY2x1ZGUgPGV4dC9wYl9kcy90cmllX3BvbGljeS5ocHA+Ci8vI2luY2x1ZGUgPGV4dC9yb3BlPgoKLy8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QiKQovLyNwcmFnbWEgR0NDIG9wdGltaXphdGlvbigidW5yb2xsLWxvb3BzLCBuby1zdGFjay1wcm90ZWN0b3IiKQovLyNwcmFnbWEgR0NDIHRhcmdldCgiYXZ4LGF2eDIsZm1hIikKCi8vdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLy91c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKLy91c2luZyBuYW1lc3BhY2UgX19nbnVfY3h4OwoKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIFRBU0sgInRlc3QiCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgRUwgY291dCA8PCBlbmRsCiNkZWZpbmUgVGkyMF9udHNvbiBpbnQgbWFpbigpCiNkZWZpbmUgaW4oeCkgY291dCA8PCB4IDw8IGVuZGwKI2RlZmluZSBhbGwoeCkgKHgpLmJlZ2luKCksKHgpLmVuZCgpCiNkZWZpbmUgZ2V0Yml0KHgsIGkpICgoKHgpID4+IChpKSkgJiAxKQojZGVmaW5lIGNudGJpdCh4KSBfX2J1aWx0aW5fcG9wY291bnQoeCkKI2RlZmluZSBGT1IoaSxsLHIpIGZvciAoaW50IGkgPSBsOyBpIDw9IHI7IGkrKykKI2RlZmluZSBGT1JEKGksbCxyKSBmb3IgKGludCBpID0gbDsgaSA+PSByOyBpLS0pCiNkZWZpbmUgRGVidWcoYSxuKSBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNvdXQgPDwgYVtpXSA8PCAiICI7IGNvdXQgPDwgZW5kbAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHBhaXI8aW50LGludD4gdmlpOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnR5cGVkZWYgdmVjdG9yPHZlY3RvcjxpbnQ+PiB2dmk7Cgpjb25zdCBpbnQgTiA9IDJlNSArIDU7CmNvbnN0IGludCBvbyA9IElOVF9NQVg7CmNvbnN0IGludCBtb2QgPSAxZTkgKyA3Owpjb25zdCBpbnQgZDR4WzRdID0gey0xLCAwLCAxLCAwfSAsIGQ0eVs0XSA9IHswLCAxLCAwLCAtMX07CmNvbnN0IGludCBkOHhbOF0gPSB7LTEsIC0xLCAwLCAxLCAxLCAxLCAwLCAtMX0sIGQ4eVs4XSA9IHswLCAxLCAxLCAxLCAwLCAtMSwgLTEsIC0xfTsKY29uc3QgaW50IEJsID0gMzMzOwoKc3RydWN0IFF1ZXJ5IHsKICAgIGludCBsLCByLCBpZDsKCiAgICBib29sIG9wZXJhdG9yIDwgKGNvbnN0IFF1ZXJ5ICZUKSBjb25zdCB7CiAgICAgICAgaWYgKGwgLyBCbCAhPSBULmwgLyBCbCkKICAgICAgICAgICAgcmV0dXJuIGwgLyBCbCA8IFQubCAvIEJsOwogICAgICAgIHJldHVybiByIDwgVC5yOwogICAgfQoKfWFbTl07CgppbnQgbiwgbSwgVmFsW05dLCBjW05dLCBtbltOXSwgbXhbTl0sIEFuc1tOXSwgQW5zMSwgQW5zMiwgbW5CbFtOXSwgbXhCbFtOXTsKCmlubGluZSB2b2lkIFJlYWRfSW5wdXQoKSB7CiAgICBjaW4gPj4gbiA+PiBtOwogICAgRk9SKGksIDEsIG4pCiAgICAgICAgY2luID4+IFZhbFtpXTsKICAgIEZPUihpLCAxLCBtKQogICAgICAgIGNpbiA+PiBhW2ldLmwgPj4gYVtpXS5yLCBhW2ldLmlkID0gaSwgYVtpXS5sLS07CiAgICBzb3J0KGEgKyAxLCBhICsgbSArIDEpOwp9Cgp1bm9yZGVyZWRfbWFwPGludCwgaW50PiBtcFtOXTsKCnZvaWQgQnVpbGQoKSB7CiAgICBjWzBdID0gMTsKICAgIGludCBjbnQgPSAxOwogICAgRk9SKGksIDEsIG4pIHsKICAgICAgICBpbnQgcmVzID0gY1tpIC0gMV07CiAgICAgICAgYXV0byBpdCA9IG1wW3Jlc10uZmluZCgtVmFsW2ldKTsKICAgICAgICBpZiAoaXQgIT0gbXBbcmVzXS5lbmQoKSkKICAgICAgICAgICAgY1tpXSA9IGNbKCppdCkuc2UgLSAxXTsKICAgICAgICBlbHNlIGNbaV0gPSArK2NudDsKICAgICAgICBtcFtjW2ldXVtWYWxbaV1dID0gaTsKLy8gICAgICAgIGNvdXQgPDwgY1tpXSA8PCAiICI7CiAgICB9Ci8vICAgIGNvdXQgPDwgJ1xuJzsKfQoKdm9pZCBBZGQoaW50IGlkKSB7CiAgICBpZiAobW5bY1tpZF1dID09IC0xKSBtbltjW2lkXV0gPSBpZDsgbW5bY1tpZF1dID0gbWluKG1uW2NbaWRdXSwgaWQpOwogICAgaWYgKG14W2NbaWRdXSA9PSAtMSkgbXhbY1tpZF1dID0gaWQ7IG14W2NbaWRdXSA9IG1heChteFtjW2lkXV0sIGlkKTsKICAgIEFuczEgPSBtYXgoQW5zMSwgbXhbY1tpZF1dIC0gbW5bY1tpZF1dKTsKfQoKdm9pZCBBZGRCbChpbnQgaWQpIHsKICAgIGlmIChtbkJsW2NbaWRdXSA9PSAtMSkgbW5CbFtjW2lkXV0gPSBpZDsgbW5CbFtjW2lkXV0gPSBtaW4obW5CbFtjW2lkXV0sIGlkKTsKICAgIGlmIChteEJsW2NbaWRdXSA9PSAtMSkgbXhCbFtjW2lkXV0gPSBpZDsgbXhCbFtjW2lkXV0gPSBtYXgobXhCbFtjW2lkXV0sIGlkKTsKICAgIEFuczIgPSBtYXgoQW5zMiwgbXhCbFtjW2lkXV0gLSBtbkJsW2NbaWRdXSk7CiAgICBBbnMyID0gbWF4KEFuczIsIG14W2NbaWRdXSAtIG1uQmxbY1tpZF1dKTsKfQoKaW5saW5lIHZvaWQgU29sdmUoKSB7CiAgICBCdWlsZCgpOwogICAgaW50IExlLCBSaTsKICAgIGludCBjdDsKICAgIEZPUihpLCAxLCBtKSB7CiAgICAgICAgaWYgKChpID09IDEpIHx8IChhW2ldLmwgLyBCbCAhPSBhW2kgLSAxXS5sIC8gQmwpKSB7CiAgICAgICAgICAgIEZPUihqLCAxLCBuICsgMSkKICAgICAgICAgICAgICAgIG1uW2pdID0gLTEsIG14W2pdID0gLTE7CiAgICAgICAgICAgIExlID0gYVtpXS5sIC8gQmwgKiBCbDsKICAgICAgICAgICAgUmkgPSBtaW4obiwgTGUgKyBCbCAtIDEpOwogICAgICAgICAgICBBbnMxID0gMDsKICAgICAgICAgICAgRk9SKGosIFJpICsgMSwgYVtpXS5yKQogICAgICAgICAgICAgICAgQWRkKGopOwogICAgICAgICAgICBjdCA9IG1heChhW2ldLnIsIFJpKTsKICAgICAgICB9CiAgICAgICAgQW5zMiA9IDA7CiAgICAgICAgRk9SKGosIExlLCBSaSkKICAgICAgICAgICAgbW5CbFtjW2pdXSA9IC0xLCBteEJsW2Nbal1dID0gLTE7CiAgICAgICAgd2hpbGUgKGN0IDwgYVtpXS5yKQogICAgICAgICAgICBBZGQoKytjdCk7CiAgICAgICAgRk9SKGosIGFbaV0ubCwgbWluKFJpLCBhW2ldLnIpKQogICAgICAgICAgICBBZGRCbChqKTsKICAgICAgICBBbnNbYVtpXS5pZF0gPSBtYXgoQW5zMSwgQW5zMik7CiAgICB9CiAgICBGT1IoaSwgMSwgbSkKICAgICAgICBjb3V0IDw8IEFuc1tpXSA8PCAnXG4nOwoKfQoKVGkyMF9udHNvbiB7Ci8vICAgIGZyZW9wZW4oVEFTSyIuSU5QIiwiciIsc3RkaW4pOwovLyAgICBmcmVvcGVuKFRBU0siLk9VVCIsInciLHN0ZG91dCk7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZSgwKTsgY291dC50aWUoMCk7CiAgICBpbnQgVCA9IDE7CiAgICB3aGlsZSAoVCAtLSApIHsKICAgICAgICBSZWFkX0lucHV0KCk7CiAgICAgICAgU29sdmUoKTsKICAgIH0KfQo=