#include <bits/stdc++.h>
using namespace std;
using ll = long long;
void solve() {
int n, q;
cin >> n >> q;
vector<int> w(n);
for (int i = 0; i < n; i++) cin >> w[i];
vector<int> threshold(n + 1, INT_MAX); // Stores min x for each score
int last = 0; // Last processed position
for (int i = 0; i < n; i++) {
int curr_x = w[i];
int score = 1;
// Start eating from i-th position
while (i - score >= 0 && curr_x >= w[i - score]) {
curr_x ^= w[i - score]; // Update weight after eating
score++; // Increase the score
}
// Record the minimum x required to achieve this score
threshold[score] = min(threshold[score], w[i]);
}
// Fill in the minimum threshold for each score in increasing order
for (int i = 1; i <= n; i++) {
threshold[i] = min(threshold[i], threshold[i - 1]);
}
// Answer queries using binary search
while (q--) {
int x;
cin >> x;
// Find max score where threshold[score] <= x
int score = upper_bound(threshold.begin(), threshold.end(), x) - threshold.begin() - 1;
cout << score << "\n";
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKdm9pZCBzb2x2ZSgpIHsKICAgIGludCBuLCBxOwogICAgY2luID4+IG4gPj4gcTsKICAgIAogICAgdmVjdG9yPGludD4gdyhuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSBjaW4gPj4gd1tpXTsKCiAgICB2ZWN0b3I8aW50PiB0aHJlc2hvbGQobiArIDEsIElOVF9NQVgpOyAvLyBTdG9yZXMgbWluIHggZm9yIGVhY2ggc2NvcmUKICAgIGludCBsYXN0ID0gMDsgLy8gTGFzdCBwcm9jZXNzZWQgcG9zaXRpb24KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGludCBjdXJyX3ggPSB3W2ldOwogICAgICAgIGludCBzY29yZSA9IDE7CiAgICAgICAgCiAgICAgICAgLy8gU3RhcnQgZWF0aW5nIGZyb20gaS10aCBwb3NpdGlvbgogICAgICAgIHdoaWxlIChpIC0gc2NvcmUgPj0gMCAmJiBjdXJyX3ggPj0gd1tpIC0gc2NvcmVdKSB7CiAgICAgICAgICAgIGN1cnJfeCBePSB3W2kgLSBzY29yZV07IC8vIFVwZGF0ZSB3ZWlnaHQgYWZ0ZXIgZWF0aW5nCiAgICAgICAgICAgIHNjb3JlKys7IC8vIEluY3JlYXNlIHRoZSBzY29yZQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBSZWNvcmQgdGhlIG1pbmltdW0geCByZXF1aXJlZCB0byBhY2hpZXZlIHRoaXMgc2NvcmUKICAgICAgICB0aHJlc2hvbGRbc2NvcmVdID0gbWluKHRocmVzaG9sZFtzY29yZV0sIHdbaV0pOwogICAgfQogICAgCiAgICAvLyBGaWxsIGluIHRoZSBtaW5pbXVtIHRocmVzaG9sZCBmb3IgZWFjaCBzY29yZSBpbiBpbmNyZWFzaW5nIG9yZGVyCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICB0aHJlc2hvbGRbaV0gPSBtaW4odGhyZXNob2xkW2ldLCB0aHJlc2hvbGRbaSAtIDFdKTsKICAgIH0KCiAgICAvLyBBbnN3ZXIgcXVlcmllcyB1c2luZyBiaW5hcnkgc2VhcmNoCiAgICB3aGlsZSAocS0tKSB7CiAgICAgICAgaW50IHg7CiAgICAgICAgY2luID4+IHg7CiAgICAgICAgCiAgICAgICAgLy8gRmluZCBtYXggc2NvcmUgd2hlcmUgdGhyZXNob2xkW3Njb3JlXSA8PSB4CiAgICAgICAgaW50IHNjb3JlID0gdXBwZXJfYm91bmQodGhyZXNob2xkLmJlZ2luKCksIHRocmVzaG9sZC5lbmQoKSwgeCkgLSB0aHJlc2hvbGQuYmVnaW4oKSAtIDE7CiAgICAgICAgY291dCA8PCBzY29yZSA8PCAiXG4iOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgCiAgICByZXR1cm4gMDsKfQo=