#include <bits/stdc++.h>
using namespace std;
struct Trie {
Trie* child[2]{nullptr,nullptr};
long long cnt=0;
};
void insert(Trie* root,int num,long long val){
Trie* node=root;
for(int i=30;i>=0;i--){
int b=(num>>i)&1;
if(!node->child[b]) node->child[b]=new Trie();
node=node->child[b];
node->cnt+=val;
}
}
long long query(Trie* node,int num,int limit,int bit=30){
if(!node) return 0;
if(bit<0) return node->cnt;
int bnum=(num>>bit)&1;
int blim=(limit>>bit)&1;
if(blim){
long long res=0;
if(node->child[bnum]) res+=node->child[bnum]->cnt;
res+=query(node->child[bnum^1],num,limit,bit-1);
return res;
} else {
return query(node->child[bnum],num,limit,bit-1);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n,k;
cin>>n>>k;
vector<int> a(n+1),l(k+1),r(k+1);
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=k;i++) cin>>l[i]>>r[i];
vector<int> pxor(n+1);
for(int i=1;i<=n;i++) pxor[i]=pxor[i-1]^a[i];
vector<map<int,long long>> dp(k+1);
dp[0][0]=1;
for(int s=1;s<=k;s++){
Trie* root=new Trie();
for(auto [val,cnt]: dp[s-1]) insert(root,val,cnt);
for(int i=1;i<=n;i++){
long long res=query(root,pxor[i],r[s])-query(root,pxor[i],l[s]-1);
if(res) dp[s][pxor[i]]+=res;
}
}
long long ans=0;
for(auto [x,v]: dp[k]) ans+=v;
cout<<ans<<"\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgVHJpZSB7CiAgICBUcmllKiBjaGlsZFsyXXtudWxscHRyLG51bGxwdHJ9OwogICAgbG9uZyBsb25nIGNudD0wOwp9OwoKdm9pZCBpbnNlcnQoVHJpZSogcm9vdCxpbnQgbnVtLGxvbmcgbG9uZyB2YWwpewogICAgVHJpZSogbm9kZT1yb290OwogICAgZm9yKGludCBpPTMwO2k+PTA7aS0tKXsKICAgICAgICBpbnQgYj0obnVtPj5pKSYxOwogICAgICAgIGlmKCFub2RlLT5jaGlsZFtiXSkgbm9kZS0+Y2hpbGRbYl09bmV3IFRyaWUoKTsKICAgICAgICBub2RlPW5vZGUtPmNoaWxkW2JdOwogICAgICAgIG5vZGUtPmNudCs9dmFsOwogICAgfQp9Cgpsb25nIGxvbmcgcXVlcnkoVHJpZSogbm9kZSxpbnQgbnVtLGludCBsaW1pdCxpbnQgYml0PTMwKXsKICAgIGlmKCFub2RlKSByZXR1cm4gMDsKICAgIGlmKGJpdDwwKSByZXR1cm4gbm9kZS0+Y250OwogICAgaW50IGJudW09KG51bT4+Yml0KSYxOwogICAgaW50IGJsaW09KGxpbWl0Pj5iaXQpJjE7CiAgICBpZihibGltKXsKICAgICAgICBsb25nIGxvbmcgcmVzPTA7CiAgICAgICAgaWYobm9kZS0+Y2hpbGRbYm51bV0pIHJlcys9bm9kZS0+Y2hpbGRbYm51bV0tPmNudDsKICAgICAgICByZXMrPXF1ZXJ5KG5vZGUtPmNoaWxkW2JudW1eMV0sbnVtLGxpbWl0LGJpdC0xKTsKICAgICAgICByZXR1cm4gcmVzOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcXVlcnkobm9kZS0+Y2hpbGRbYm51bV0sbnVtLGxpbWl0LGJpdC0xKTsKICAgIH0KfQoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7CiAgICBpbnQgbixrOwogICAgY2luPj5uPj5rOwogICAgdmVjdG9yPGludD4gYShuKzEpLGwoaysxKSxyKGsrMSk7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgY2luPj5hW2ldOwogICAgZm9yKGludCBpPTE7aTw9aztpKyspIGNpbj4+bFtpXT4+cltpXTsKICAgIHZlY3RvcjxpbnQ+IHB4b3IobisxKTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSBweG9yW2ldPXB4b3JbaS0xXV5hW2ldOwogICAgdmVjdG9yPG1hcDxpbnQsbG9uZyBsb25nPj4gZHAoaysxKTsKICAgIGRwWzBdWzBdPTE7CiAgICBmb3IoaW50IHM9MTtzPD1rO3MrKyl7CiAgICAgICAgVHJpZSogcm9vdD1uZXcgVHJpZSgpOwogICAgICAgIGZvcihhdXRvIFt2YWwsY250XTogZHBbcy0xXSkgaW5zZXJ0KHJvb3QsdmFsLGNudCk7CiAgICAgICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgICAgICBsb25nIGxvbmcgcmVzPXF1ZXJ5KHJvb3QscHhvcltpXSxyW3NdKS1xdWVyeShyb290LHB4b3JbaV0sbFtzXS0xKTsKICAgICAgICAgICAgaWYocmVzKSBkcFtzXVtweG9yW2ldXSs9cmVzOwogICAgICAgIH0KICAgIH0KICAgIGxvbmcgbG9uZyBhbnM9MDsKICAgIGZvcihhdXRvIFt4LHZdOiBkcFtrXSkgYW5zKz12OwogICAgY291dDw8YW5zPDwiXG4iOwp9Cg==