package com.company;

//BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        br.readLine();
//        String s = br.readLine();
//        int add = 0;
//        int i = 0;
//        int j = s.length() -1;
//        while (i < j) {
//        if(s.charAt(i) != s.charAt(j)) {
//        add++;
//        }
//        else {
//        j--;
//        }
//        i++;
//        }
//        System.out.println(add);

import javax.swing.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.PriorityQueue;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] parts = br.readLine().split(" ");
        int N = Integer.valueOf(parts[0]);
        int K = Integer.valueOf(parts[1]);

        parts = br.readLine().split(" ");
        String[] binaries = new String[N];
        int[] arr = new int[N];
//        char[][] bin = new char[N][15];
        int maxL = -1;
        for(int i=0; i<parts.length; ++i) {
            arr[i] = Integer.valueOf(parts[i]);
            binaries[i] = Integer.toBinaryString(arr[i]);

//            System.out.printf("%15s\n", binaries[i]);
//            for(int j=0; j<binaries[i].length(); ++j) {
//                bin[i][]
//            }
            maxL = Math.max(maxL, binaries[i].length());
        }

//        System.out.println("*****");
        int res = 0;
        for(int i=maxL; i>0; --i) {
            int count = 0;
            PriorityQueue<Integer> heap = new PriorityQueue<>();
            ArrayList<Integer> poss = new ArrayList<>();
//            System.out.println("i="+i);
            for(int j=0; j<N; ++j) {
                if (binaries[j].length()-i >= 0 && binaries[j].charAt(binaries[j].length()-i)=='1') {
                    count++;
//                    System.out.println(arr[j]);
//                    if(heap.size() < K) {
//                        heap.add(arr[j]);
//                    }
//                    else {
//                        int q = heap.poll();
//                        heap.add(Math.max(q, arr[j]));
//                    }
                    poss.add(j);
                }
            }
//            res += 1<<(i-1);
//            System.out.println(res);
            if (count>= K) {
//                int res = -1;
//                Iterator<Integer> iter = heap.iterator();
//                while (iter.hasNext()) {
//                    if (res == -1) {
//                        res = iter.next();
//                    }
//                    else {
//                        res &= iter.next();
//                    }
//                }
//                System.out.println(heap);
//                System.out.println(res);

                ArrayList<Integer> newP = new ArrayList<Integer>();
                for(int k=i; k>0; --k) {
                    int c = 0;
                    for (int jj=0; jj<poss.size(); ++jj) {
                        if (binaries[poss.get(jj)].length() - k >= 0 && binaries[poss.get(jj)].charAt(binaries[poss.get(jj)].length() - k) == '1') {
                            c++;
                        }
                        else {
                            newP.add(poss.get(jj));
                        }
                    }
                    if(c >= K) {
                        res += 1<<(k-1);
//                        System.out.println("k="+k+" res=" + res);
                        poss.removeAll(newP);
                    }

                }

//                System.out.println(i);
                System.out.println(res);
//                System.out.println(count);
                break;
            }
        }

    }
}

