# include <bits/stdc++.h>
# define inf 1e15
using namespace std;
inline int read (){int s = 0 ; bool w = 0 ; char c = getchar () ; while (!isdigit (c)) {w |= (c == '-') ,c = getchar () ;} while (isdigit (c)){s = (s << 1) + (s << 3) + (c ^ 48) ; c = getchar ();}return w ? -s : s;}
inline void write (int x){if (x < 0) putchar ('-') ,x = -x; if (x > 9) write (x / 10) ; putchar (x % 10 | 48);}
inline void writesp (int x){write (x) ,putchar (' ');}
inline void writeln (int x){write (x) ,putchar ('\n');}
const int N = 6e5 + 15 ,BLOCK = sqrt (N) + 100;
int n ,Q ,num ,len ,V ,discrete[N] ,a[N] ,sum[N] ,pos[N];
vector <int> vec[N];
int pre;
int l[BLOCK], r[BLOCK] ,z[BLOCK][BLOCK] ,belong[N];
inline void build (){
for (int i = 1 ; i <= num; i ++)
l[i] = (i - 1) * len + 1, r[i] = i * len;
r[num] = n;
for (int i = 1 ; i <= n ; i ++) belong[i] = (i - 1) / len + 1;
for (int i = 1 ; i <= num ; i ++){
memset (sum ,0 , sizeof sum);
for (int j = i ; j <= num ; j ++){
z[i][j] = z[i][j - 1];
for (int k = l[j] ; k <= r[j] ; k ++){
sum[a[k]] ++;
z[i][j] = max (z[i][j] ,sum[a[k]]);
}
} memset (sum ,0 , sizeof sum);
}
} signed main (){
n = read () ,Q = read () ,len = sqrt (n);
num = 707;
for (int i = 1 ; i <= n ;i ++) a[i] = read () ,discrete[i] = a[i];
for (int i = 1 ; i <= n ; i ++) {
vec[a[i]].push_back (i);
pos[i] = vec[a[i]].size () - 1;
}
build ();
while (Q --){
int ls = read () ,rs = read ();
ls ^= pre ,rs ^= pre;
if (ls > rs) swap (ls ,rs);
int L = belong[ls] ,R = belong[rs];
if (L + 2 >= R){
int ans = 0;
for (int i = ls ; i <= rs ; i ++) sum[a[i]] ++;
for (int i = ls ; i <= rs ; i ++)
ans = max (ans ,sum[a[i]]);
for (int i = ls ; i <= rs ; i ++) sum[a[i]] = 0;
writeln (ans);
pre = ans;
} else {
int ans = z[L + 1][R - 1];
for (int i = ls ; i <= r[L]; i ++){
int now = pos[i] ,sz = vec[a[i]].size ();
while (now + ans < sz && vec[a[i]][now + ans] <= rs) ++ ans;
}
for (int i = l[R] ; i <= rs; i ++){
int now = pos[i];
while (now - ans >= 0 && vec[a[i]][now - ans] >= ls) ++ ans;
}
writeln (ans);
pre = ans;
}
}
return 0;
}