- #include <bits/stdc++.h>
- #define ll long long int
- #define ld long double
- using namespace std;
-
- ll n;
- vector<ll> v;
-
- int solve(int bit, ll k)
- {
- int ans = n + 1;
- unordered_map<ll, int> m;
- ll curr_xor = 0;
- vector<ll> prefix_xor(n + 1);
- for (int i = 0; i < n; i++)
- {
- ll curr = ((v[i] >> bit) << bit);
- prefix_xor[i + 1] = curr;
- }
- for (int i = 1; i <= n; i++)
- {
- curr_xor ^= prefix_xor[i];
- if (curr_xor == k)
- ans = min(ans, i);
- if (m[curr_xor ^ k])
- ans = min(ans, i - m[curr_xor ^ k]);
- m[curr_xor] = i;
- }
- return ans;
- }
-
- void mainSolve()
- {
- ll k;
- cin >> n >> k;
- v.clear();
- v.resize(n);
- for (int i = 0; i < n; i++)
- cin >> v[i];
- int ans = solve(0, k);
- for (int bit = 30; bit >= 0; bit--)
- {
- if ((k >> bit) & 1)
- continue;
- ll curr_k = (((k >> bit) | 1) << bit);
- ans = min(ans, solve(bit, curr_k));
- }
- if (ans == (n + 1))
- ans = -1;
- cout << ans << endl;
- }
-
- int main()
- {
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif
- int t;
- cin >> t;
- while (t--)
- {
- mainSolve();
- }
- return 0;
- }