#include <iostream>
#include <set>
using namespace std;
const int maxn=200005;
int n,a[maxn];
long long segment_tree[3*maxn];
long long merge_nodes(long long A, long long B){
return A^B;
}
void build_tree(int L=0,int R=n-1,int node=1){
if(L==R){
segment_tree[node]=a[L];
}else{
int middle=(L+R)/2;
build_tree(L,middle,2*node);
build_tree(middle+1,R,2*node+1);
segment_tree[node]=merge_nodes(segment_tree[2*node],segment_tree[2*node+1]);
}
}
long long query(int i,int j,int L=0,int R=n-1,int node=1){
if(R<i || j<L){
return 0;
}
if(i<=L && R<=j){
return segment_tree[node];
}
int middle=(L+R)/2;
long long left=query(i,j, L, middle,2*node);
long long right=query(i,j,middle + 1, R,2*node+1);
return merge_nodes(left,right);
}
int main()
{
int q;
cin>>n>>q;
for(int i = 0;i<n;i++){
cin>>a[i];
}
build_tree();
for(int i=0;i<q;i++){
int A,B;
cin>>A>>B;
cout<<query(A-1,B-1)<<endl;
}
return 0;
}