#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define all(x) x.begin(),x.end()

ll MOD = 1000000007;

ll oo = 1e15;

struct XorBasis {
    static const ll LOG = 60;
    ll bases[LOG];
    void init() {
        for (ll i=0;i<LOG;i++) {
            bases[i] = 0;
        }
    }
    ll nullity = 0;
    void insert(ll x) {
        for (ll i=LOG-1;i>=0;i--) {
            ll bit = (1ll<<i);
            if ( bit&x ) {
                if (bases[i]) {
                    x^=bases[i];
                }else {
                    bases[i] = x;
                    return;
                }
            }
        }
        nullity++;
    }
    bool can(ll x) {
        for (ll i=LOG-1;i>=0;i--) {
            ll bit = (1ll<<i);
            if ( bit&x ) {
                if (bases[i]) {
                    x^=bases[i];
                }else {
                    return false;
                }
            }
        }
        return true;
    }
};

void solve() {
    XorBasis basis;
    basis.init();
    ll n,k;cin>>n>>k;
    ll a[n];
    for (ll i=0;i<n;i++) {
        cin>>a[i];
        basis.insert(a[i]);
    }
    ll ans = -1;
    ll cnt = 1;
    for (ll i=0;i<k/2;i++) {
        ll pal = (1ll<<i) + (1ll<<(k-1-i));
        if ( basis.can(pal) ) {
            cnt*=2;
            cnt%=MOD;
        }
        if ((k&1) && basis.can(pal + (1ll<<(k+1/2)))) {
            cnt*=2;
            cnt%=MOD;
        }
    }
    cnt*=1ll<<basis.nullity;
    ans+=cnt;
    cout<<ans<<endl;
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
#ifndef ONLINE_JUDGE
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
#endif

    bool calc = false;
    // calc = true;
    if(calc){
        cout<<(1ll<<(20))<<endl;
        return 0;
    }
    ll t=1;
    cin>>t;
    while(t--) {
        solve();
    }
}