import java.util.*; import java.io.*; import java.text.*; class p{ static final long MOD = (long)1e9+7; static int L = 16; static final int MAX = (int)5e4+50; static FastReader in; static int N, ptr; static Node[] trie; static int[] A, xor, rt; static long K, cur; public static void main(String[] args){ in = new FastReader(); A = new int[MAX]; xor = new int[MAX]; rt = new int[MAX]; trie = new Node[MAX*(L+1)]; for(int i = 0; i< trie.length; i++)trie[i] = new Node(); rt[0] = insert(0, 0); N = ni(); K = nl(); for(int i = 1; i<= N; i++){ A[i] = ni(); xor[i] = xor[i-1]^A[i]; rt[i] = insert(rt[i-1], xor[i]); } long lo = 0, hi = N*(1<>1; cur = 0; count(1, N, mid); if(cur>=K){ hi = mid-1; ans = mid; }else lo = mid+1; } pn(ans); } static void count(int l, int r, long mid){ if(r=K)return; if(l==r){ if(A[l]*(long)A[l] <= mid)cur++; return; } int p = 0; long min = Long.MAX_VALUE; for(int i = l; i<= r; i++){ if(A[i]=K)return; long x = mid/A[p]; if(p-l <= r-p){ for(int i = l; i<= p; i++)cur += get(rt[r], xor[i-1], x) - get(rt[p-1], xor[i-1], x); }else{ for(int i = p; i<= r; i++)cur += get(rt[p-1], xor[i], x) - ((l>=2)?get(rt[l-2], xor[i], x):0); } } static int insert(int prev, int x){ int root = ++ptr, ret = root; trie[root] = new Node(trie[prev].count+1, trie[prev].to[0], trie[prev].to[1]); for(int i = L-1; i>= 0; i--){ int bit = (x>>i)&1, nxt = ++ptr; if(trie[root].to[bit] != -1){ trie[nxt] = new Node(trie[trie[root].to[bit]].count, trie[trie[root].to[bit]].to[0], trie[trie[root].to[bit]].to[1]); } trie[root].to[bit] = nxt; root = nxt; trie[root].count++; } return ret; } static long get(int root, int xo, long x){ long out = 0, nw = 0; for(int i = L-1; i>= 0; i--){ if(root == -1)break; int bit = (xo>>i)&1; if((nw|(1<