#pragma GCC optimize("O3,unroll-loops")
#include <iostream>
#include <algorithm>
using namespace std;
const int limN = 200005;
const int BLOCK = 450;
const int MAXB = limN / BLOCK + 5;
int n, q;
int a[limN];
int ind[limN];
int mx[MAXB][MAXB];
int vis[limN];
int head[limN];
int sz[limN];
int cur[limN];
int position[limN];
int cnt[limN];
inline void checkl(int i, int r, int id, int &ans) {
int v = a[i];
if (vis[v] == id) return;
vis[v] = id;
if (sz[v] <= ans) return;
int h = head[v];
int it = ind[i];
while (it + ans < sz[v] && position[h + it + ans] <= r) ++ans;
}
inline void checkr(int i, int l, int id, int &ans) {
int v = a[i];
if (vis[v] == id) return;
vis[v] = id;
if (sz[v] <= ans) return;
int h = head[v];
int it = ind[i];
while (it - ans >= 0 && position[h + it - ans] >= l) ++ans;
}
int query(int l, int r, int id) {
int bl = (l - 1) / BLOCK;
int br = (r - 1) / BLOCK;
if (br - bl <= 1) {
int ans = 0;
for (int i = r; i >= l; --i)
checkr(i, l, id, ans);
return ans;
}
int ans = mx[bl + 1][br - 1];
for (int i = l; i <= (bl + 1) * BLOCK; ++i)
checkl(i, r, id, ans);
for (int i = r; i >= br * BLOCK + 1; --i)
checkr(i, l, id, ans);
return ans;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> q;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
++sz[a[i]];
}
head[1] = 0;
for (int i = 2; i <= 200000; ++i)
head[i] = head[i - 1] + sz[i - 1];
for (int i = 1; i <= 200000; ++i)
cur[i] = head[i];
for (int i = 1; i <= n; ++i) {
int v = a[i];
ind[i] = cur[v] - head[v];
position[cur[v]++] = i;
}
int numblock = (n + BLOCK - 1) / BLOCK;
for (int i = 0; i < numblock; ++i) {
int cur = 0;
for (int j = i; j < numblock; ++j) {
for (int k = j * BLOCK + 1; k <= min(n, (j + 1) * BLOCK); ++k) {
int v = a[k];
++cnt[v];
if (cnt[v] > cur) cur = cnt[v];
}
mx[i][j] = cur;
}
for (int j = i * BLOCK + 1; j <= n; ++j)
--cnt[a[j]];
}
long long lastans = 0;
for (int id = 1; id <= q; ++id) {
long long x, y;
cin >> x >> y;
long long l = (x + lastans) % n + 1;
long long r = (y + lastans) % n + 1;
if (l > r) swap(l, r);
lastans = query(l, r, id);
cout << lastans << '\n';
}
return 0;
}
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk8zLHVucm9sbC1sb29wcyIpCgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IGxpbU4gPSAyMDAwMDU7CmNvbnN0IGludCBCTE9DSyA9IDQ1MDsKY29uc3QgaW50IE1BWEIgPSBsaW1OIC8gQkxPQ0sgKyA1OwoKaW50IG4sIHE7CmludCBhW2xpbU5dOwppbnQgaW5kW2xpbU5dOwppbnQgbXhbTUFYQl1bTUFYQl07CmludCB2aXNbbGltTl07CgppbnQgaGVhZFtsaW1OXTsKaW50IHN6W2xpbU5dOwppbnQgY3VyW2xpbU5dOwppbnQgcG9zaXRpb25bbGltTl07CmludCBjbnRbbGltTl07CgppbmxpbmUgdm9pZCBjaGVja2woaW50IGksIGludCByLCBpbnQgaWQsIGludCAmYW5zKSB7CiAgICBpbnQgdiA9IGFbaV07CiAgICBpZiAodmlzW3ZdID09IGlkKSByZXR1cm47CiAgICB2aXNbdl0gPSBpZDsKCiAgICBpZiAoc3pbdl0gPD0gYW5zKSByZXR1cm47CgogICAgaW50IGggPSBoZWFkW3ZdOwogICAgaW50IGl0ID0gaW5kW2ldOwogICAgd2hpbGUgKGl0ICsgYW5zIDwgc3pbdl0gJiYgcG9zaXRpb25baCArIGl0ICsgYW5zXSA8PSByKSArK2FuczsKfQoKaW5saW5lIHZvaWQgY2hlY2tyKGludCBpLCBpbnQgbCwgaW50IGlkLCBpbnQgJmFucykgewogICAgaW50IHYgPSBhW2ldOwogICAgaWYgKHZpc1t2XSA9PSBpZCkgcmV0dXJuOwogICAgdmlzW3ZdID0gaWQ7CgogICAgaWYgKHN6W3ZdIDw9IGFucykgcmV0dXJuOwoKICAgIGludCBoID0gaGVhZFt2XTsKICAgIGludCBpdCA9IGluZFtpXTsKICAgIHdoaWxlIChpdCAtIGFucyA+PSAwICYmIHBvc2l0aW9uW2ggKyBpdCAtIGFuc10gPj0gbCkgKythbnM7Cn0KCmludCBxdWVyeShpbnQgbCwgaW50IHIsIGludCBpZCkgewogICAgaW50IGJsID0gKGwgLSAxKSAvIEJMT0NLOwogICAgaW50IGJyID0gKHIgLSAxKSAvIEJMT0NLOwoKICAgIGlmIChiciAtIGJsIDw9IDEpIHsKICAgICAgICBpbnQgYW5zID0gMDsKICAgICAgICBmb3IgKGludCBpID0gcjsgaSA+PSBsOyAtLWkpCiAgICAgICAgICAgIGNoZWNrcihpLCBsLCBpZCwgYW5zKTsKICAgICAgICByZXR1cm4gYW5zOwogICAgfQoKICAgIGludCBhbnMgPSBteFtibCArIDFdW2JyIC0gMV07CgogICAgZm9yIChpbnQgaSA9IGw7IGkgPD0gKGJsICsgMSkgKiBCTE9DSzsgKytpKQogICAgICAgIGNoZWNrbChpLCByLCBpZCwgYW5zKTsKCiAgICBmb3IgKGludCBpID0gcjsgaSA+PSBiciAqIEJMT0NLICsgMTsgLS1pKQogICAgICAgIGNoZWNrcihpLCBsLCBpZCwgYW5zKTsKCiAgICByZXR1cm4gYW5zOwp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKCiAgICBjaW4gPj4gbiA+PiBxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgKytpKSB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICAgICAgKytzelthW2ldXTsKICAgIH0KCiAgICBoZWFkWzFdID0gMDsKICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IDIwMDAwMDsgKytpKQogICAgICAgIGhlYWRbaV0gPSBoZWFkW2kgLSAxXSArIHN6W2kgLSAxXTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSAyMDAwMDA7ICsraSkKICAgICAgICBjdXJbaV0gPSBoZWFkW2ldOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgIGludCB2ID0gYVtpXTsKICAgICAgICBpbmRbaV0gPSBjdXJbdl0gLSBoZWFkW3ZdOwogICAgICAgIHBvc2l0aW9uW2N1clt2XSsrXSA9IGk7CiAgICB9CgogICAgaW50IG51bWJsb2NrID0gKG4gKyBCTE9DSyAtIDEpIC8gQkxPQ0s7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJsb2NrOyArK2kpIHsKICAgICAgICBpbnQgY3VyID0gMDsKICAgICAgICBmb3IgKGludCBqID0gaTsgaiA8IG51bWJsb2NrOyArK2opIHsKICAgICAgICAgICAgZm9yIChpbnQgayA9IGogKiBCTE9DSyArIDE7IGsgPD0gbWluKG4sIChqICsgMSkgKiBCTE9DSyk7ICsraykgewogICAgICAgICAgICAgICAgaW50IHYgPSBhW2tdOwogICAgICAgICAgICAgICAgKytjbnRbdl07CiAgICAgICAgICAgICAgICBpZiAoY250W3ZdID4gY3VyKSBjdXIgPSBjbnRbdl07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbXhbaV1bal0gPSBjdXI7CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGogPSBpICogQkxPQ0sgKyAxOyBqIDw9IG47ICsraikKICAgICAgICAgICAgLS1jbnRbYVtqXV07CiAgICB9CgogICAgbG9uZyBsb25nIGxhc3RhbnMgPSAwOwogICAgZm9yIChpbnQgaWQgPSAxOyBpZCA8PSBxOyArK2lkKSB7CiAgICAgICAgbG9uZyBsb25nIHgsIHk7CiAgICAgICAgY2luID4+IHggPj4geTsKCiAgICAgICAgbG9uZyBsb25nIGwgPSAoeCArIGxhc3RhbnMpICUgbiArIDE7CiAgICAgICAgbG9uZyBsb25nIHIgPSAoeSArIGxhc3RhbnMpICUgbiArIDE7CgogICAgICAgIGlmIChsID4gcikgc3dhcChsLCByKTsKCiAgICAgICAgbGFzdGFucyA9IHF1ZXJ5KGwsIHIsIGlkKTsKICAgICAgICBjb3V0IDw8IGxhc3RhbnMgPDwgJ1xuJzsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=