"use strict"
function Main(input){
  input=input.split("\n");
  input[0]=input[0].split(" ");
  var N=parseInt(input[0][0]);
  var K=parseInt(input[0][1]).toString(2);
  while(K.length<50){
    K="0"+K;
  }
  input.shift();
  input=input.join("").split(" ");
  var A=[];
  for(let i=0;i<N;i++){
    A[i]=parseInt(input[i]).toString(2);
    while(A[i].length<50){
      A[i]="0"+A[i];
    }
  }
  var digSum=[];
  var whichIsMany=[];
  for(let i=0;i<50;i++){
    digSum[i]=0;
    for(let j=0;j<N;j++){
      digSum[i] += (A[j][i]==="1")?1:0;
    }
    whichIsMany[i]=(digSum[i]>N/2)?1:0;
  }
  var a=[];
  for(let i=0;i<50;i++){
    a[i]=(whichIsMany[i]===1)?(digSum[i]):(N-digSum[i]);
  }
  var counter=0;
  var OneIsAvailable=0;
  for(let i=0;i<50;i++){//2進法50桁で上の数から攻める。
    if(K[i]==="1")OneIsAvailable++;
    if(OneIsAvailable>0){
      counter += a[i]*Math.pow(2,49-i);
      if(whichIsMany[i]===0)OneIsAvailable--;
    }else{
      counter += digSum[i]*Math.pow(2,49-i);
    }
    OneIsAvailable *= 2;
  }
  var counter2=0;
  OneIsAvailable = false;
  for(let i=0;i<50;i++){//2進法50桁で上の数から攻める。
    if(OneIsAvailable){
      counter2 += a[i]*Math.pow(2,49-i);
    }else{
      counter2 += digSum[i]*Math.pow(2,49-i);
    }
    if(K[i]==="1")OneIsAvailable = true;
  }
  console.log(Math.max(counter,counter2));
}

Main(require("fs").readFileSync("/dev/stdin","utf8"));
