1. #include <bits/stdc++.h>
  2. #define ll long long int
  3. #define ld long double
  4. using namespace std;
  5.  
  6. ll n;
  7. vector<ll> v;
  8.  
  9. int solve(int bit, ll k)
  10. {
  11. int ans = n + 1;
  12. unordered_map<ll, int> m;
  13. ll curr_xor = 0;
  14. vector<ll> prefix_xor(n + 1);
  15. for (int i = 0; i < n; i++)
  16. {
  17. ll curr = ((v[i] >> bit) << bit);
  18. prefix_xor[i + 1] = curr;
  19. }
  20. for (int i = 1; i <= n; i++)
  21. {
  22. curr_xor ^= prefix_xor[i];
  23. if (curr_xor == k)
  24. ans = min(ans, i);
  25. if (m[curr_xor ^ k])
  26. ans = min(ans, i - m[curr_xor ^ k]);
  27. m[curr_xor] = i;
  28. }
  29. return ans;
  30. }
  31.  
  32. void mainSolve()
  33. {
  34. ll k;
  35. cin >> n >> k;
  36. v.clear();
  37. v.resize(n);
  38. for (int i = 0; i < n; i++)
  39. cin >> v[i];
  40. int ans = solve(0, k);
  41. for (int bit = 30; bit >= 0; bit--)
  42. {
  43. if ((k >> bit) & 1)
  44. continue;
  45. ll curr_k = (((k >> bit) | 1) << bit);
  46. ans = min(ans, solve(bit, curr_k));
  47. }
  48. if (ans == (n + 1))
  49. ans = -1;
  50. cout << ans << endl;
  51. }
  52.  
  53. int main()
  54. {
  55. #ifndef ONLINE_JUDGE
  56. freopen("input.txt", "r", stdin);
  57. freopen("output.txt", "w", stdout);
  58. #endif
  59. int t;
  60. cin >> t;
  61. while (t--)
  62. {
  63. mainSolve();
  64. }
  65. return 0;
  66. }