#include<bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 1e9+7;
const int N = 1e5+5, D = 20;
ll p2[N];
void solve() {
int n, q; cin >> n >> q;
vector<int> a(n);
for (auto &ai: a) {
cin >> ai;
}
vector<array<int, 2>> cu[n];
for (int i = 0; i < q; ++i) {
int l, x; cin >> l >> x; l--;
cu[l].push_back({x, i});
}
vector<int> basis(D);
int rank = 0;
vector<int> ans(q);
for (int i = 0; i < n; ++i) {
int mask = a[i];
for (int j = D - 1; j >= 0; --j) {
if (!(mask & (1 << j))) continue;
if (!basis[j]) {
basis[j] = mask;
rank++;
break;
}
mask ^= basis[j];
}
for (auto [x, idx]: cu[i]) {
for (int j = D - 1; j >= 0; --j) {
if (!(x & (1 << j))) continue;
x ^= basis[j];
}
if (x == 0) {
ans[idx] = p2[i - rank + 1];
}
}
}
for (auto x: ans) {
cout << x << "\n";
}
}
int main(){
ios::sync_with_stdio(0), cin.tie(0);
p2[0] = 1;
for (int i = 1; i < N; ++i) {
p2[i] = p2[i - 1] + p2[i - 1];
if (p2[i] >= mod) p2[i] -= mod;
}
int tc = 1;
for (int t = 1; t <= tc; ++t) {
solve();
}
}
977D - Divide by three multiply by two | 1654B - Prefix Removals |
1654A - Maximum Cake Tastiness | 1649A - Game |
139A - Petr and Book | 1612A - Distance |
520A - Pangram | 124A - The number of positions |
1041A - Heist | 901A - Hashing Trees |
1283A - Minutes Before the New Year | 1654D - Potion Brewing Class |
1107B - Digital root | 25A - IQ test |
785A - Anton and Polyhedrons | 1542B - Plus and Multiply |
306A - Candies | 1651C - Fault-tolerant Network |
870A - Search for Pretty Integers | 1174A - Ehab Fails to Be Thanos |
1169A - Circle Metro | 780C - Andryusha and Colored Balloons |
1153A - Serval and Bus | 1487C - Minimum Ties |
1136A - Nastya Is Reading a Book | 1353B - Two Arrays And Swaps |
1490E - Accidental Victory | 1335A - Candies and Two Sisters |
96B - Lucky Numbers (easy) | 1151B - Dima and a Bad XOR |