#include <bits/stdc++.h>
#define int long long
#define db double
const int Mod = 1e9 + 7;
using namespace std;
const int N = 200010;
int t, n, k;
int arr[N];
int dp[2][64];
int num(int x) { return __builtin_popcount(x); }
signed main() {
cin >> t;
while (t--) {
memset(dp[0], 0, sizeof dp[0]);
memset(dp[1], 0, sizeof dp[1]);
cin >> n >> k;
for (int i = 1; i <= n; i++)
cin >> arr[i];
for (int i = 1; i <= n; i++) {
dp[i % 2][arr[i]] = 1;
for (int j = 0; j < 64; j++) {
dp[i % 2][j] = (dp[i % 2][j] + dp[(i - 1) % 2][j]) % Mod;
dp[i % 2][j & arr[i]] =
(1LL * dp[i % 2][j & arr[i]] + dp[(i - 1) % 2][j]) % Mod;
}
}
int ans = 0;
for (int i = 0; i < 64; i++) {
if (num(i) == k)
ans += dp[n % 2][i], ans %= Mod;
}
cout << ans << '\n';
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 200010, mod = 1e9 + 7;
int f[N][64];
int n, k;
int a[N];
void solve() {
cin >> n >> k;
for (int i = 1; i <= n; i++) memset(f[i], 0, sizeof(f[i]));
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) {
f[i][a[i]] = 1;
for (int j = 0; j < 64; j++) {
f[i][j] = (1ll * f[i][j] + f[i - 1][j]) % mod;
f[i][j & a[i]] = (1ll * f[i][j & a[i]] + f[i - 1][j]) % mod;
}
}
int res = 0;
for (int i = 0; i < 64; i++) {
int cnt = 0;
for (int j = 0; j < 6; j++) {
if (i >> j & 1) cnt++;
}
if (cnt == k) res = (1ll * res + f[n][i]) % mod;
}
cout << res << '\n';
}
int main() {
#ifdef DEBUG
freopen("Test.in", "r", stdin);
cout << "===================START===================" << endl;
#endif
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while (T--) solve();
#ifdef DEBUG
cout << "====================END====================" << endl;
#endif
return 0;
}