#include <bits/stdc++.h>
#define int long long
#define ii pair<int,int>
#define nd second
#define st first
#define endl "\n"
using namespace std;
const int MOD = 1e9 + 7;
int n, k;
vector<int> a, pre;
vector<vector<int>> dp;
vector<ii> Q;
void add(int &x, int y)
{
x += y;
if (x >= MOD)
x -= MOD;
if (x < 0)
x += MOD;
}
struct Trie{
Trie *child[2];
int sum;
};
struct Trie *getNode(void){
Trie *x = new Trie();
x->sum = 0;
return x;
}
vector<Trie*> root;
void insert(int team, int XOR, int val){
Trie *x = root[team];
for (int i = 30; i >= 0; i--){
int key = (XOR >> i) & 1;
if (!x->child[key]) x->child[key] = getNode();
x = x->child[key];
add(x->sum, val);
}
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> k;
a.resize(n + 2);
pre.resize(n + 2);
dp.resize(n + 2, vector<int>(k + 2));
Q.resize(k + 2);
root.resize(k + 2);
for (int i = 0; i <= k; i++) root[i] = getNode();
for (int i = 1; i <= n; i++) cin >> a[i], pre[i] = pre[i - 1] ^ a[i];
for (int i = 1; i <= k; i++) cin >> Q[i].st >> Q[i].nd;
insert(0, 0, 1);
for (int i = 1; i <= n; i++){
for (int j = 1; j <= min(i, k); j++){
int l = Q[j].st - 1, r = Q[j].nd;
int res = 0;
Trie *x = root[j - 1];
int bit;
for (bit = 30; bit >= 0; bit--){
int key = (r >> bit) & 1, k = (pre[i] >> bit) & 1;
if (key && x->child[k]) add(res, x->child[k]->sum);
if (!x->child[key ^ k]) break;
x = x->child[key ^ k];
}
if (bit == -1) add(res, x->sum);
x = root[j - 1];
if (l >= 0){
for (bit = 30; bit >= 0; bit--){
int key = (l >> bit) & 1, k = (pre[i] >> bit) & 1;
if (key && x->child[k]) add(res, -x->child[k]->sum);
if (!x->child[key ^ k]) break;
x = x->child[key ^ k];
}
if (bit == -1) add(res, -x->sum);
}
dp[i][j] = res;
}
for (int j = 1; j <= min(i, k); j++)
insert(j, pre[i], dp[i][j]);
}
cout << dp[n][k] << endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBuZCBzZWNvbmQKI2RlZmluZSBzdCBmaXJzdAojZGVmaW5lIGVuZGwgIlxuIgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgaW50IE1PRCA9IDFlOSArIDc7CmludCBuLCBrOwp2ZWN0b3I8aW50PiBhLCBwcmU7CnZlY3Rvcjx2ZWN0b3I8aW50Pj4gZHA7CnZlY3RvcjxpaT4gUTsKdm9pZCBhZGQoaW50ICZ4LCBpbnQgeSkKewogICAgeCArPSB5OwogICAgaWYgKHggPj0gTU9EKQogICAgICAgIHggLT0gTU9EOwogICAgaWYgKHggPCAwKQogICAgICAgIHggKz0gTU9EOwp9CnN0cnVjdCBUcmllewogICAgVHJpZSAqY2hpbGRbMl07CiAgICBpbnQgc3VtOwp9OwpzdHJ1Y3QgVHJpZSAqZ2V0Tm9kZSh2b2lkKXsKICAgIFRyaWUgKnggPSBuZXcgVHJpZSgpOwogICAgeC0+c3VtID0gMDsKICAgIHJldHVybiB4Owp9CnZlY3RvcjxUcmllKj4gcm9vdDsKdm9pZCBpbnNlcnQoaW50IHRlYW0sIGludCBYT1IsIGludCB2YWwpewogICAgVHJpZSAqeCA9IHJvb3RbdGVhbV07CiAgICBmb3IgKGludCBpID0gMzA7IGkgPj0gMDsgaS0tKXsKICAgICAgICBpbnQga2V5ID0gKFhPUiA+PiBpKSAmIDE7CiAgICAgICAgaWYgKCF4LT5jaGlsZFtrZXldKSB4LT5jaGlsZFtrZXldID0gZ2V0Tm9kZSgpOwogICAgICAgIHggPSB4LT5jaGlsZFtrZXldOwogICAgICAgIGFkZCh4LT5zdW0sIHZhbCk7CiAgICB9Cn0Kc2lnbmVkIG1haW4oKXsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsKICAgIGNpbiA+PiBuID4+IGs7CiAgICBhLnJlc2l6ZShuICsgMik7CiAgICBwcmUucmVzaXplKG4gKyAyKTsKICAgIGRwLnJlc2l6ZShuICsgMiwgdmVjdG9yPGludD4oayArIDIpKTsKICAgIFEucmVzaXplKGsgKyAyKTsKICAgIHJvb3QucmVzaXplKGsgKyAyKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGs7IGkrKykgcm9vdFtpXSA9IGdldE5vZGUoKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldLCBwcmVbaV0gPSBwcmVbaSAtIDFdIF4gYVtpXTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IGs7IGkrKykgY2luID4+IFFbaV0uc3QgPj4gUVtpXS5uZDsKICAgIGluc2VydCgwLCAwLCAxKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbWluKGksIGspOyBqKyspewogICAgICAgICAgICBpbnQgbCA9IFFbal0uc3QgLSAxLCByID0gUVtqXS5uZDsKICAgICAgICAgICAgaW50IHJlcyA9IDA7CiAgICAgICAgICAgIFRyaWUgKnggPSByb290W2ogLSAxXTsKICAgICAgICAgICAgaW50IGJpdDsKICAgICAgICAgICAgZm9yIChiaXQgPSAzMDsgYml0ID49IDA7IGJpdC0tKXsKICAgICAgICAgICAgICAgIGludCBrZXkgPSAociA+PiBiaXQpICYgMSwgayA9IChwcmVbaV0gPj4gYml0KSAmIDE7CiAgICAgICAgICAgICAgICBpZiAoa2V5ICYmIHgtPmNoaWxkW2tdKSBhZGQocmVzLCB4LT5jaGlsZFtrXS0+c3VtKTsKICAgICAgICAgICAgICAgIGlmICgheC0+Y2hpbGRba2V5IF4ga10pIGJyZWFrOwogICAgICAgICAgICAgICAgeCA9IHgtPmNoaWxkW2tleSBeIGtdOyAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYml0ID09IC0xKSBhZGQocmVzLCB4LT5zdW0pOwogICAgICAgICAgICB4ID0gcm9vdFtqIC0gMV07CiAgICAgICAgICAgIGlmIChsID49IDApewogICAgICAgICAgICAgICAgZm9yIChiaXQgPSAzMDsgYml0ID49IDA7IGJpdC0tKXsKICAgICAgICAgICAgICAgICAgICBpbnQga2V5ID0gKGwgPj4gYml0KSAmIDEsIGsgPSAocHJlW2ldID4+IGJpdCkgJiAxOwogICAgICAgICAgICAgICAgICAgIGlmIChrZXkgJiYgeC0+Y2hpbGRba10pIGFkZChyZXMsIC14LT5jaGlsZFtrXS0+c3VtKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIXgtPmNoaWxkW2tleSBeIGtdKSBicmVhazsKICAgICAgICAgICAgICAgICAgICB4ID0geC0+Y2hpbGRba2V5IF4ga107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoYml0ID09IC0xKSBhZGQocmVzLCAteC0+c3VtKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBkcFtpXVtqXSA9IHJlczsKICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbWluKGksIGspOyBqKyspCiAgICAgICAgICAgIGluc2VydChqLCBwcmVbaV0sIGRwW2ldW2pdKTsKICAgIH0KICAgIGNvdXQgPDwgZHBbbl1ba10gPDwgZW5kbDsKCn0=