#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<vector<long long>> memo;
long long solve(int n ,int granici , int mesto , vector<long long> niza){
    long long ans=0;
    if(memo[granici-1][mesto]!=-1) return memo[granici-1][mesto];
    else if(granici==1){
        long long val=0;
        for(int i = mesto ; i<n-1 ; i++){
            val=niza[i]|niza[i+1];
        }
        if(ans==0) ans=niza[mesto];
        return memo[granici-1][mesto]=ans;
    }
    else{
        for(int i = mesto ; i<n-granici ; i++){
            long long val=0;
            for(int j = mesto ; j<i ; j++){
                val=niza[j]|niza[j+1];
            }
            if(val==0) val=niza[i];
            ans=max(ans,val&solve(n, granici-1,i, niza));
        }
        return memo[granici-1][mesto]=ans;
    }
}
int main(){
int n,k; cin>>n>>k;
memo.assign(n,vector<long long>(k,-1));
vector<long long> niza(n);
for(int i = 0 ; i<n ; i++) cin>>niza[i];
cout<<solve(n,k,0,niza);
}
