#include<iostream>
#include<cstdio>
#include<iomanip>
#include<memory.h>
#include<cstdlib>
#include<ctime>
#include<climits>
#include<cctype>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<bitset>
#include<map>
#include<unordered_map>
#include<stack>
#include<vector>
#include<queue>
#include<deque>
#include<list>
#define bug puts("liupei")
#define int long long
#define F(i,j,n) for(register int i=j;i<=n;++i)
#define R(i,j,n) for(register int i=j;i>=n;--i)
#define MAX_TIME 0.95
#define pii pair<int,int>
#define max(a,b) (a>b)?a:b
#define min(a,b) (a<b)?a:b
using namespace std;
const bool debug=0;
const int N=5e5+50;
int T,n,lg[N],st[N][55],a[N];
unsigned long long k;
inline void ST() {
F(i,1,n) st[i][0] = a[i];
int p = lg[n];
F(k,1,p){
F(i,1,n-(1<<k)+1) {
st[i][k] = max(st[i][k-1],st[i+(1<<(k-1))][k-1]);
}
}
return;
}
inline int query(int l,int r) {
int p = lg[r-l+1];
return max(st[l][p],st[r-(1<<p)+1][p]);
}
signed main() {
if(debug){
freopen("f.in","r",stdin);
}
scanf("%lld%lld",&n,&T);
F(i,1,n)scanf("%lld",&a[i]);
lg[1]=0;F(i,2,n) lg[i]=lg[i>>1]+1;
ST();
register int lastans=0;
while(T--){
int u,v;
scanf("%lld%lld",&u,&v);
register int l,q;
l=1+(u^lastans)%n;q=1+(v^(lastans+1))%(n-l+1);
register int cnt=0;
F(i,l,l+q-1)cnt+=query(l,i);
lastans=cnt;
printf("%lld\n",lastans);
}
return 0;
}