#include <bits/stdc++.h>
using namespace std;
#define ll int
#define ull unsigned ll
#define ld long double
typedef vector<int> vi;
typedef multiset<int> mi;
typedef multiset<ll> mll;
typedef vector<ll> vll;
typedef vector<bool> vb;
typedef vector<string> vs;
typedef set<ll> sll;
typedef vector<vector<int>> _2vi;
typedef vector<vector<ll>> _2vll;
#define all(v) ((v).begin()), ((v).end())
#define sz(v) ((ll)((v).size()))
#define vinp(v, n) \
for (ull i = 0; i < (n); i++) \
cin >> (v)[i]
#define printv(v) \
for (auto i : (v)) \
cout << i << " "
#define fr0(i, n) for (ull(i) = 0; (i) < (n); (i)++)
#define fr1(i, n) for (ull(i) = 1; (i) < (n); (i)++)
#define fr(i, x, n) for (ull(i) = (x); (i) < (n); (i)++)
#define _CRT_SECURE_NO_WARNING
const ll MOD = 1000000007;
void Bustany() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
#ifndef ONLINE_JUDGE
freopen("./in.txt", "r", stdin), freopen("./out.txt", "w", stdout);
#endif
}
const ll N = 1e5 + 5;
vector<sll> adj(N);
//_2vll adj(N,vll(N));
vb vis;
void solve() {
ll n, m;
cin >> n >> m;
vll v(n);
vinp(v, n);
ll x = 0;
bool equal=true;
for (ll i = 0; i < n; i++) {
if(v[i]!=v[0])equal=false;
x |= v[i];
}
//here all elements should be x
//sooo I should know where each bit should be found
//I can make them as a pair of intervals and combine them to reach minimum operations
unordered_map<ll, ll> mp;
unordered_map<ll, ll> reqBits;
vector<ll> req;
for (ll i = 0; i < 32; i++) {
for (ll r = 0; r < n; r++) {
if ((v[r] & (1LL << i)) == 0 && (x & (1LL << i))) {
if (!mp[r]) {
mp[r] = 1;
req.push_back(r);
}
reqBits[i]++;
}
}
}
sort(all(req));
//here should combine intervals
ll cnt = 0;
ll r = 0;
ll l = ((req.size() == 0) ? 0 : req[0]);
while (r != req.size()) {
while (r != req.size() && req[r] - l + 1 <= m) {
r++;
}
cnt++;
if (r != req.size()) {
l = req[r];
}
}
// cout << cnt << endl;
ll q;
cin >> q;
while (q--) {
ll y;
cin >> y;
if(equal) { cout << 0 << '\n';
continue; }
bool ok = true;
for (auto i: reqBits) {
if (((1LL << i.first) & y) == 0) {
cout << -1 << '\n';
ok = false;
break;
}
}
if (!ok)continue;
for (ll i = 0; i < 31; i++) {
if ((1LL << i) & y && !((1LL << i) & x)) {
if(n%m==0){
cout << n/m<<'\n';
}
else{
cout << (n/m)+1<<'\n';
}
ok = false;
break;
}
}
if (ok)
cout << cnt << '\n';
}
}
int main() {
Bustany();
ll t = 1;
cin >> t;
while (t--) {
solve();
}
}