#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();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCgpsbCBNT0QgPSAxMDAwMDAwMDA3OwoKbGwgb28gPSAxZTE1OwoKc3RydWN0IFhvckJhc2lzIHsKICAgIHN0YXRpYyBjb25zdCBsbCBMT0cgPSA2MDsKICAgIGxsIGJhc2VzW0xPR107CiAgICB2b2lkIGluaXQoKSB7CiAgICAgICAgZm9yIChsbCBpPTA7aTxMT0c7aSsrKSB7CiAgICAgICAgICAgIGJhc2VzW2ldID0gMDsKICAgICAgICB9CiAgICB9CiAgICBsbCBudWxsaXR5ID0gMDsKICAgIHZvaWQgaW5zZXJ0KGxsIHgpIHsKICAgICAgICBmb3IgKGxsIGk9TE9HLTE7aT49MDtpLS0pIHsKICAgICAgICAgICAgbGwgYml0ID0gKDFsbDw8aSk7CiAgICAgICAgICAgIGlmICggYml0JnggKSB7CiAgICAgICAgICAgICAgICBpZiAoYmFzZXNbaV0pIHsKICAgICAgICAgICAgICAgICAgICB4Xj1iYXNlc1tpXTsKICAgICAgICAgICAgICAgIH1lbHNlIHsKICAgICAgICAgICAgICAgICAgICBiYXNlc1tpXSA9IHg7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG51bGxpdHkrKzsKICAgIH0KICAgIGJvb2wgY2FuKGxsIHgpIHsKICAgICAgICBmb3IgKGxsIGk9TE9HLTE7aT49MDtpLS0pIHsKICAgICAgICAgICAgbGwgYml0ID0gKDFsbDw8aSk7CiAgICAgICAgICAgIGlmICggYml0JnggKSB7CiAgICAgICAgICAgICAgICBpZiAoYmFzZXNbaV0pIHsKICAgICAgICAgICAgICAgICAgICB4Xj1iYXNlc1tpXTsKICAgICAgICAgICAgICAgIH1lbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9Cn07Cgp2b2lkIHNvbHZlKCkgewogICAgWG9yQmFzaXMgYmFzaXM7CiAgICBiYXNpcy5pbml0KCk7CiAgICBsbCBuLGs7Y2luPj5uPj5rOwogICAgbGwgYVtuXTsKICAgIGZvciAobGwgaT0wO2k8bjtpKyspIHsKICAgICAgICBjaW4+PmFbaV07CiAgICAgICAgYmFzaXMuaW5zZXJ0KGFbaV0pOwogICAgfQogICAgbGwgYW5zID0gLTE7CiAgICBsbCBjbnQgPSAxOwogICAgZm9yIChsbCBpPTA7aTxrLzI7aSsrKSB7CiAgICAgICAgbGwgcGFsID0gKDFsbDw8aSkgKyAoMWxsPDwoay0xLWkpKTsKICAgICAgICBpZiAoIGJhc2lzLmNhbihwYWwpICkgewogICAgICAgICAgICBjbnQqPTI7CiAgICAgICAgICAgIGNudCU9TU9EOwogICAgICAgIH0KICAgICAgICBpZiAoKGsmMSkgJiYgYmFzaXMuY2FuKHBhbCArICgxbGw8PChrKzEvMikpKSkgewogICAgICAgICAgICBjbnQqPTI7CiAgICAgICAgICAgIGNudCU9TU9EOwogICAgICAgIH0KICAgIH0KICAgIGNudCo9MWxsPDxiYXNpcy5udWxsaXR5OwogICAgYW5zKz1jbnQ7CiAgICBjb3V0PDxhbnM8PGVuZGw7Cn0KCnNpZ25lZCBtYWluKCl7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoTlVMTCk7Y291dC50aWUoTlVMTCk7CiNpZm5kZWYgT05MSU5FX0pVREdFCiAgICBmcmVvcGVuKCJpbnB1dC50eHQiLCJyIixzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwidyIsc3Rkb3V0KTsKI2VuZGlmCgogICAgYm9vbCBjYWxjID0gZmFsc2U7CiAgICAvLyBjYWxjID0gdHJ1ZTsKICAgIGlmKGNhbGMpewogICAgICAgIGNvdXQ8PCgxbGw8PCgyMCkpPDxlbmRsOwogICAgICAgIHJldHVybiAwOwogICAgfQogICAgbGwgdD0xOwogICAgY2luPj50OwogICAgd2hpbGUodC0tKSB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==