#include <bits/stdc++.h>   using namespace std;   template <class T>   void rd(T& ret) {     ret = 0;     bool ok = 0, u = 0;     for (;;) {       int c = getchar();       if (c >=  0  && c <=  9 )         ret = (ret << 3) + (ret << 1) + c -  0 , ok = 1;       else if (c ==  - )         u = 1;       else if (ok) {         if (u) ret *= -1;         return;       }     }   }   long long powmod(long long p, long long n, long long mod) {     long long ret = 1;     for (; n; n >>= 1) {       if (n & 1) ret = ret * p % mod;       p = p * p % mod;     }     return ret;   }   template <class T>   bool chmin(T& a, const T& b) {     return b < a ? a = b, 1 : 0;   }   template <class T>   bool chmax(T& a, const T& b) {     return b > a ? a = b, 1 : 0;   }   int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }   const long long mod = (long long)1e9 + 7;   const int N = 1 << 21;   pair<pair<int, int>, int> qn[N];   int stk[N], top, an[N], ans[N];   bool has[N];   int main() {     int n, q;     scanf( %d%d , &n, &q);     for (int i = (0); i < (n); i++) scanf( %d , an + i);     for (int i = (0); i < (q); i++) {       int l, first;       scanf( %d%d , &l, &first);       --l;       qn[i].first = pair<int, int>(l, first);       qn[i].second = i;     }     sort(qn, qn + q);     has[0] = 1;     stk[top++] = 0;     long long t = 1, it = 0;     for (int i = (0); i < (n); i++) {       if (has[an[i]])         t = (t << 1) % mod;       else {         int tn = top, second;         for (int j = (0); j < (tn); j++) {           second = an[i] ^ stk[j];           stk[top++] = second;           has[second] = 1;         }         has[an[i]] = 1;         stk[top++] = an[i];       }       while (it < q && qn[it].first.first == i) {         int val = qn[it].first.second;         ans[qn[it].second] = has[val] ? t : 0;         ++it;       }     }     for (int i = (0); i < (q); i++) printf( %d n , ans[i]);     return 0;   }   