https://codeforces.com/problemset/problem/1946/D
#pragma GCC optimize(3,"Ofast","inline")
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
#define int long long
#define ld long double
int n,x;
void solve()
{ cin>>n>>x;
int k=-1;
x++;//要求小于x即可
vector<int>a(n);
for(int i=0;i<n;i++) cin>>a[i];
for(int i=30;i>=0;i--){
vector<int>b;
bool ok=false;
for(int j=0;j<a.size();j++){//数组a会变化
if(ok) b.back()^=a[j];
else b.push_back(a[j]);
if(a[j]&(1<<i)) ok=!ok;//代表出现了一个1
}
if(x&(1<<i)){
if(!ok) //偶数个组合1
k=max(k,(int)b.size());
}else{
if(ok) //奇数个组合,该位组合只能是1
{cout<<k<<endl;return;}
a=b;//该位必须变成0,组合改变
}
}
cout<<k<<endl;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int t; cin>>t;
while(t--)
{
solve();
}
return 0;
}