#include <iostream>
using namespace std;
#define max(a, b) (a>b?a:b)
int dp[10005][1001]= {0};
int main() {
// your code goes here
int n, a[10005]={0}, m, i,j, ans[1005]={0};
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++){
scanf("%d",&a[i]);
}
for(i=0;i<=10000;i++){
for(j=0;j<=1000;j++){
dp[i][j] = -1;
}
}
dp[0][0] = 0;
for(i=1; i<=n; i++){
for(j=0; j<=1000; j++){
if(dp[i-1][j] != -1){
dp[i][j^a[i]] = max(dp[i][j^a[i]], dp[i-1][j]+1);
}
dp[i][j] = max(dp[i][j], dp[i-1][j]);
if(dp[i][j] != -1){
ans[j] = max(ans[j], dp[i][j]);
}
}
}
for(i=0;i<=m;i++){
printf("%d\n", ans[i]);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwojZGVmaW5lIG1heChhLCBiKSAoYT5iP2E6YikKaW50IGRwWzEwMDA1XVsxMDAxXT0gezB9OwppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCWludCBuLCBhWzEwMDA1XT17MH0sIG0sIGksaiwgYW5zWzEwMDVdPXswfTsKCXNjYW5mKCIlZCVkIiwmbiwmbSk7Cglmb3IoaT0xOyBpPD1uOyBpKyspewoJCXNjYW5mKCIlZCIsJmFbaV0pOwoJfQoJZm9yKGk9MDtpPD0xMDAwMDtpKyspewoJCWZvcihqPTA7ajw9MTAwMDtqKyspewoJCQlkcFtpXVtqXSA9IC0xOwoJCX0KCX0KCWRwWzBdWzBdID0gMDsKCWZvcihpPTE7IGk8PW47IGkrKyl7CgkJZm9yKGo9MDsgajw9MTAwMDsgaisrKXsKCQkJaWYoZHBbaS0xXVtqXSAhPSAtMSl7CgkJCQlkcFtpXVtqXmFbaV1dID0gbWF4KGRwW2ldW2peYVtpXV0sIGRwW2ktMV1bal0rMSk7CgkJCX0KCQkJZHBbaV1bal0gPSBtYXgoZHBbaV1bal0sIGRwW2ktMV1bal0pOwoJCQlpZihkcFtpXVtqXSAhPSAtMSl7CgkJCQlhbnNbal0gPSBtYXgoYW5zW2pdLCBkcFtpXVtqXSk7CgkJCX0KCQl9Cgl9Cglmb3IoaT0wO2k8PW07aSsrKXsKCQlwcmludGYoIiVkXG4iLCBhbnNbaV0pOwoJfQoJcmV0dXJuIDA7Cn0=