// ROOT : DRAGON3012009
#include <bits/stdc++.h>
#define ll int
#define ld long double
#define el "\n"
#define fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define __ROOT__ int main()
#pragma GCC optimize("O2")
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define fi first
#define se second
#define M 1000000007
#define MAXN 300001
#define INF (1ll<<30)
#define BLOCK_SIZE 425
#define MAX_NODE 1001001
#define LOG 19
#define ALPHA_SIZE 26
#define BASE 311
#define NAME "file"
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
using namespace std;
const ll MOD[] = {(ll)1e9 + 2277, (ll)1e9 + 5277, (ll)1e9 + 8277, (ll)1e9 + 9277, (ll) 1e9 + 7 };
const ll NMOD = 1;
const int dx[] = {-1, 0, 1,0};
const int dy[] = {0, 1, 0, -1};
//**Variable**//
ll n, num_block, last_ans = 0, q ;
ll arr[MAXN];
ll cnt[MAXN] ;
ll b[MAXN] ;
vector<ll> pos[MAXN] ;
ll mode[MAXN / BLOCK_SIZE][MAXN / BLOCK_SIZE ] ;
//**Struct**//
//**Function**//
template<class X, class Y >
bool minimize(X & x, const Y &y ) {
return x > y ? x = y, 1:0 ;
}
template<class X, class Y >
bool maximize(X &x, const Y &y ) {
return x < y ? x = y, 1:0 ;
}
void prepare() {
FOR(i, 0, num_block) { // cur_block
memset(cnt, 0, sizeof cnt) ;
ll ma = 0 ;
FOR(j,min( i*BLOCK_SIZE,n ), n ) {
cnt[arr[j]] ++ ;
maximize(ma, cnt[arr[j]] );
mode[i][j/BLOCK_SIZE] = ma ;
}
}
memset(cnt, 0, sizeof cnt) ;
}
ll query(ll l, ll r) {
ll ans = 0 ;
ll blockL = l / BLOCK_SIZE, blockR = r / BLOCK_SIZE ;
if(blockL == blockR ) {
FOR(i, l, r ) cnt[arr[i]] ++, maximize(ans, cnt[arr[i]] ) ;
FOR(i , l , r) cnt[arr[i]] -- ;
} else {
ans = mode[blockL+ 1 ][blockR - 1 ] ;
for(ll i = l ; i / BLOCK_SIZE == blockL ; i ++ ) {
if(ans < pos[arr[i]].size()) {
ll temp = 0 ;
temp = upper_bound(pos[arr[i]].begin(), pos[arr[i]].end(), r ) - lower_bound(pos[arr[i]].begin(), pos[arr[i]].end(), l ) ;
maximize(ans, temp) ;
}
}
for(ll i = r ; i / BLOCK_SIZE == blockR ; i -- ) {
if(ans < pos[arr[i]].size()) {
ll temp = 0 ;
temp = upper_bound(pos[arr[i]].begin(), pos[arr[i]].end(), r ) - lower_bound(pos[arr[i]].begin(), pos[arr[i]].end(), l ) ;
maximize(ans, temp) ;
}
}
}
return ans ;
}
void init() {
cin>>n >> q;
num_block = n / BLOCK_SIZE ;
FOR(i,1, n) cin >> arr[i] ;
FOR(i, 1, n) {
b[i] = pos[arr[i]].size() ;
pos[arr[i]].push_back(i) ;
}
prepare() ;
}
void solve() {
FOR(i, 1, q) {
ll x, y ;
cin >> x >> y ;
x = (x + last_ans )% n + 1 ;
y = (y + last_ans )% n + 1 ;
if(x > y ) swap(x, y) ;
last_ans = query(x, y) ;
cout << last_ans << el;
}
}
__ROOT__ {
// freopen(NAME".inp" , "r" , stdin);
// freopen(NAME".out" , "w", stdout) ;
fast;
int t =1 ;// cin >> t;
while(t-- ) {
init();
solve();
}
}
Ly8gUk9PVCA6IERSQUdPTjMwMTIwMDkKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgaW50CiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgZmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKI2RlZmluZSBfX1JPT1RfXyBpbnQgbWFpbigpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJPMiIpCiNkZWZpbmUgRk9SKGksbCxyKSBmb3IoaW50IGkgPSBsIDsgaSA8PSByIDsgaSArKykKI2RlZmluZSBGT1JEKGkscixsKSBmb3IoaW50IGkgPSByIDsgaSA+PSBsIDsgaSAtLSkKI2RlZmluZSBSRVAoaSwgYSApIGZvcihpbnQgaSA9IDAgOyBpIDwgYSA7IGkgKysgKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgTSAxMDAwMDAwMDA3CiNkZWZpbmUgTUFYTiAzMDAwMDEKI2RlZmluZSBJTkYgKDFsbDw8MzApCiNkZWZpbmUgQkxPQ0tfU0laRSA0MjUKI2RlZmluZSBNQVhfTk9ERSAxMDAxMDAxCiNkZWZpbmUgTE9HIDE5CiNkZWZpbmUgQUxQSEFfU0laRSAyNgojZGVmaW5lIEJBU0UgMzExCiNkZWZpbmUgTkFNRSAiZmlsZSIKI2RlZmluZSBjb21wYXJlKHYpIHNvcnQoKHYpLmJlZ2luKCksICh2KS5lbmQoKSk7ICh2KS5lcmFzZSh1bmlxdWUoKHYpLmJlZ2luKCksICh2KS5lbmQoKSksICh2KS5lbmQoKSk7CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxsIE1PRFtdID0geyhsbCkxZTkgKyAyMjc3LCAobGwpMWU5ICsgNTI3NywgKGxsKTFlOSArIDgyNzcsIChsbCkxZTkgKyA5Mjc3LCAobGwpIDFlOSArIDcgfTsKY29uc3QgbGwgTk1PRCA9IDE7CmNvbnN0IGludCBkeFtdID0gey0xLCAwLCAxLDB9Owpjb25zdCBpbnQgZHlbXSA9IHswLCAxLCAwLCAtMX07Ci8vKipWYXJpYWJsZSoqLy8KbGwgbiwgbnVtX2Jsb2NrLCBsYXN0X2FucyA9IDAsIHEgICAgOwpsbCBhcnJbTUFYTl07CmxsIGNudFtNQVhOXSA7CmxsIGJbTUFYTl0gOwp2ZWN0b3I8bGw+IHBvc1tNQVhOXSA7CmxsIG1vZGVbTUFYTiAvIEJMT0NLX1NJWkVdW01BWE4gLyBCTE9DS19TSVpFIF0gOwovLyoqU3RydWN0KiovLwoKLy8qKkZ1bmN0aW9uKiovLwp0ZW1wbGF0ZTxjbGFzcyBYLCBjbGFzcyBZID4KYm9vbCBtaW5pbWl6ZShYICYgeCwgY29uc3QgWSAmeSApIHsKICAgIHJldHVybiB4ID4geSA/IHggPSB5LCAxOjAgOwp9CnRlbXBsYXRlPGNsYXNzIFgsIGNsYXNzIFkgPgpib29sIG1heGltaXplKFggJngsIGNvbnN0IFkgJnkgKSB7CiAgICByZXR1cm4geCA8IHkgPyB4ID0geSwgMTowIDsKfQp2b2lkIHByZXBhcmUoKSB7CiAgICBGT1IoaSwgMCwgbnVtX2Jsb2NrKSB7IC8vIGN1cl9ibG9jawogICAgICAgIG1lbXNldChjbnQsIDAsIHNpemVvZiBjbnQpIDsKICAgICAgICBsbCBtYSA9IDAgOwogICAgICAgIEZPUihqLG1pbiggaSpCTE9DS19TSVpFLG4gKSwgbiApIHsKICAgICAgICAgICAgY250W2FycltqXV0gKysgOwogICAgICAgICAgICBtYXhpbWl6ZShtYSwgY250W2FycltqXV0gKTsKICAgICAgICAgICAgbW9kZVtpXVtqL0JMT0NLX1NJWkVdID0gbWEgOwogICAgICAgIH0KICAgIH0KICAgIG1lbXNldChjbnQsIDAsIHNpemVvZiBjbnQpIDsKfQpsbCBxdWVyeShsbCBsLCBsbCByKSB7CiAgICBsbCBhbnMgPSAwIDsKICAgIGxsIGJsb2NrTCA9IGwgLyBCTE9DS19TSVpFLCBibG9ja1IgPSByIC8gQkxPQ0tfU0laRSA7CiAgICBpZihibG9ja0wgPT0gYmxvY2tSICkgewogICAgICAgIEZPUihpLCBsLCByICkgY250W2FycltpXV0gKyssIG1heGltaXplKGFucywgY250W2FycltpXV0gKSA7CiAgICAgICAgRk9SKGkgLCBsICwgcikgY250W2FycltpXV0gLS0gOwogICAgfSBlbHNlIHsKICAgICAgICBhbnMgPSBtb2RlW2Jsb2NrTCsgMSBdW2Jsb2NrUiAtIDEgXSA7CiAgICAgICAgZm9yKGxsIGkgPSBsIDsgaSAvIEJMT0NLX1NJWkUgPT0gYmxvY2tMIDsgaSArKyApIHsKICAgICAgICAgICAgaWYoYW5zIDwgcG9zW2FycltpXV0uc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICBsbCB0ZW1wID0gMCA7CiAgICAgICAgICAgICAgICB0ZW1wID0gdXBwZXJfYm91bmQocG9zW2FycltpXV0uYmVnaW4oKSwgcG9zW2FycltpXV0uZW5kKCksIHIgKSAtIGxvd2VyX2JvdW5kKHBvc1thcnJbaV1dLmJlZ2luKCksIHBvc1thcnJbaV1dLmVuZCgpLCBsICkgOwogICAgICAgICAgICAgICAgbWF4aW1pemUoYW5zLCB0ZW1wKSA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yKGxsIGkgPSByIDsgaSAvIEJMT0NLX1NJWkUgPT0gYmxvY2tSIDsgaSAtLSApIHsKICAgICAgICAgICAgaWYoYW5zIDwgcG9zW2FycltpXV0uc2l6ZSgpKSB7CiAgICAgICAgICAgICAgICBsbCB0ZW1wID0gMCA7CiAgICAgICAgICAgICAgICB0ZW1wID0gdXBwZXJfYm91bmQocG9zW2FycltpXV0uYmVnaW4oKSwgcG9zW2FycltpXV0uZW5kKCksIHIgKSAtIGxvd2VyX2JvdW5kKHBvc1thcnJbaV1dLmJlZ2luKCksIHBvc1thcnJbaV1dLmVuZCgpLCBsICkgOwogICAgICAgICAgICAgICAgbWF4aW1pemUoYW5zLCB0ZW1wKSA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gYW5zIDsKfQp2b2lkIGluaXQoKSB7CiAgICBjaW4+Pm4gPj4gcTsKICAgIG51bV9ibG9jayA9IG4gLyBCTE9DS19TSVpFIDsKICAgIEZPUihpLDEsIG4pIGNpbiA+PiBhcnJbaV0gOwogICAgRk9SKGksIDEsIG4pIHsKICAgICAgICBiW2ldID0gcG9zW2FycltpXV0uc2l6ZSgpIDsKICAgICAgICBwb3NbYXJyW2ldXS5wdXNoX2JhY2soaSkgOwogICAgfQogICAgICAgIHByZXBhcmUoKSA7Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBGT1IoaSwgMSwgcSkgewogICAgICAgIGxsIHgsIHkgOwogICAgICAgIGNpbiA+PiB4ID4+IHkgOwogICAgICAgIHggPSAoeCArIGxhc3RfYW5zICklIG4gKyAxIDsKICAgICAgICB5ID0gKHkgKyBsYXN0X2FucyApJSBuICsgMSA7CiAgICAgICAgaWYoeCA+IHkgKSBzd2FwKHgsIHkpIDsKICAgICAgICBsYXN0X2FucyA9IHF1ZXJ5KHgsIHkpIDsKICAgICAgICBjb3V0IDw8IGxhc3RfYW5zIDw8IGVsOwogICAgfQp9CgpfX1JPT1RfXyB7Ci8vICAgICBmcmVvcGVuKE5BTUUiLmlucCIgLCAiciIgLCBzdGRpbik7Ci8vICAgICBmcmVvcGVuKE5BTUUiLm91dCIgLCAidyIsIHN0ZG91dCkgOwogICAgZmFzdDsKICAgIGludCB0ID0xIDsvLyAgICBjaW4gPj4gdDsKICAgIHdoaWxlKHQtLSApIHsKICAgICAgICBpbml0KCk7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==