#include<bits/stdc++.h>
using namespace std;
struct node
{
long long data;
node *child[2];
};
node *newNode(long long d)
{
node *root = new node;
root->data = d;
root->child[0] = NULL;
root->child[1] = NULL;
return root;
}
void insert(node *root,long long num)
{
node *curr = root;
for(int i=61;i>=0;i--)
{
bool bit = (num & (1<<i));
if(curr->child[bit]==NULL)
curr->child[bit] = newNode(num);
curr = curr->child[bit];
}
}
long long search(node *root,long long num,int depth)
{
if(root==NULL)
return INT_MAX;
if(root->child[0]==NULL&&root->child[1]==NULL)
return ((root->data)&(num));
bool bit = (num & (1<<depth));
if(bit)
{
if(root->child[0]!=NULL)
return search(root->child[0],num,depth-1);
else
return search(root->child[1],num,depth-1);
}
return min(search(root->child[0],num,depth-1),search(root->child[1],num,depth-1));
}
void del(node *root)
{
if(root==NULL)
return;
if(root->child[0]==NULL&&root->child[1]==NULL)
{
delete(root);
return;
}
del(root->child[0]);
del(root->child[1]);
delete(root);
}
int main()
{
int t,n,k;
scanf("%d",&t);
for(int l=1;l<=t;l++)
{
node *root = newNode(0);
scanf("%d%d",&n,&k);
long long num[n+1];
for(int i=0;i<n;i++)
{
scanf("%lld",&num[i]);
insert(root,num[i]);
}
long long mx = 0;
for(int i=0;i<n;i++)
{
long long temp = num[i];
for(int j=0;j<k;j++)
{
temp = search(root,temp,61);
}
mx = max(mx,temp);
}
printf("Case #%d: %lld\n",l,mx);
del(root);
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBub2RlCnsKICAgIGxvbmcgbG9uZyBkYXRhOwogICAgbm9kZSAqY2hpbGRbMl07Cn07Cm5vZGUgKm5ld05vZGUobG9uZyBsb25nIGQpCnsKICAgIG5vZGUgKnJvb3QgPSBuZXcgbm9kZTsKICAgIHJvb3QtPmRhdGEgPSBkOwogICAgcm9vdC0+Y2hpbGRbMF0gPSBOVUxMOwogICAgcm9vdC0+Y2hpbGRbMV0gPSBOVUxMOwogICAgcmV0dXJuIHJvb3Q7Cn0Kdm9pZCBpbnNlcnQobm9kZSAqcm9vdCxsb25nIGxvbmcgbnVtKQp7CiAgICBub2RlICpjdXJyID0gcm9vdDsKCiAgICBmb3IoaW50IGk9NjE7aT49MDtpLS0pCiAgICB7CiAgICAgICAgYm9vbCBiaXQgPSAobnVtICYgKDE8PGkpKTsKCiAgICAgICAgaWYoY3Vyci0+Y2hpbGRbYml0XT09TlVMTCkKICAgICAgICBjdXJyLT5jaGlsZFtiaXRdID0gbmV3Tm9kZShudW0pOwoKICAgICAgICBjdXJyID0gY3Vyci0+Y2hpbGRbYml0XTsKICAgIH0KfQoKbG9uZyBsb25nIHNlYXJjaChub2RlICpyb290LGxvbmcgbG9uZyBudW0saW50IGRlcHRoKQp7CiAgICBpZihyb290PT1OVUxMKQogICAgICAgIHJldHVybiBJTlRfTUFYOwoKICAgIGlmKHJvb3QtPmNoaWxkWzBdPT1OVUxMJiZyb290LT5jaGlsZFsxXT09TlVMTCkKICAgIHJldHVybiAoKHJvb3QtPmRhdGEpJihudW0pKTsKCiAgICBib29sIGJpdCA9IChudW0gJiAoMTw8ZGVwdGgpKTsKCiAgICBpZihiaXQpCiAgICB7CiAgICAgICBpZihyb290LT5jaGlsZFswXSE9TlVMTCkKICAgICAgIHJldHVybiBzZWFyY2gocm9vdC0+Y2hpbGRbMF0sbnVtLGRlcHRoLTEpOwogICAgICAgZWxzZQogICAgICAgcmV0dXJuIHNlYXJjaChyb290LT5jaGlsZFsxXSxudW0sZGVwdGgtMSk7CiAgICB9CgogICAgcmV0dXJuIG1pbihzZWFyY2gocm9vdC0+Y2hpbGRbMF0sbnVtLGRlcHRoLTEpLHNlYXJjaChyb290LT5jaGlsZFsxXSxudW0sZGVwdGgtMSkpOwp9Cgp2b2lkIGRlbChub2RlICpyb290KQp7CiAgICBpZihyb290PT1OVUxMKQogICAgcmV0dXJuOwoKICAgIGlmKHJvb3QtPmNoaWxkWzBdPT1OVUxMJiZyb290LT5jaGlsZFsxXT09TlVMTCkKICAgIHsKICAgICAgICBkZWxldGUocm9vdCk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGRlbChyb290LT5jaGlsZFswXSk7CiAgICBkZWwocm9vdC0+Y2hpbGRbMV0pOwoKICAgIGRlbGV0ZShyb290KTsKfQoKCmludCBtYWluKCkKewogICAgaW50IHQsbixrOwoKICAgIHNjYW5mKCIlZCIsJnQpOwoKICAgIGZvcihpbnQgbD0xO2w8PXQ7bCsrKQogICAgewogICAgICAgIG5vZGUgKnJvb3QgPSBuZXdOb2RlKDApOwoKICAgICAgICBzY2FuZigiJWQlZCIsJm4sJmspOwoKICAgICAgICBsb25nIGxvbmcgbnVtW24rMV07CgogICAgICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICAgICAgewogICAgICAgICAgICBzY2FuZigiJWxsZCIsJm51bVtpXSk7CiAgICAgICAgICAgIGluc2VydChyb290LG51bVtpXSk7CiAgICAgICAgfQoKICAgICAgICBsb25nIGxvbmcgbXggPSAwOwoKICAgICAgICBmb3IoaW50IGk9MDtpPG47aSsrKQogICAgICAgIHsKICAgICAgICAgICAgbG9uZyBsb25nIHRlbXAgPSBudW1baV07CgogICAgICAgICAgICBmb3IoaW50IGo9MDtqPGs7aisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0ZW1wICA9ICBzZWFyY2gocm9vdCx0ZW1wLDYxKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBteCA9IG1heChteCx0ZW1wKTsKICAgICAgICB9CgogICAgICAgIHByaW50ZigiQ2FzZSAjJWQ6ICVsbGRcbiIsbCxteCk7CgoKICAgICAgICBkZWwocm9vdCk7CiAgICB9CgoKCiAgICByZXR1cm4gMDsKfQo=