DBG = !true
n,k = gets.split.map{|x| x.to_i}
a = gets.split.map{|x| x.to_i}
s = [] if DBG
b = Array.new(61)
for i in 0..60
  b[i] = []
end
for i in 0...n
  s << Array.new(n,0) if DBG
  sum = 0
  for j in i...n
    sum += a[j]
    s[i][j] = sum if DBG
    for m in 0..60
      if (sum & (1 << m)) != 0
        b[m] << sum #[i, j, sum]
      end
    end
  end
end

if DBG
  printf("n:%d k:%d\n", n, k)
  puts "s ---"
  print s
  puts "\nb ---"
  print b
  puts ""
end

prod = 0
i = 60
while true
  puts "in while loop" if DBG
  maxm = -1
  i.downto(0) { |m|
    if DBG
      printf("m:%d\n",m)
      print b[m]
      puts ""
    end
    next if b[m].size < k
    maxm = m
    break
  }
  printf("i:%d maxm:%d\n", i, maxm) if DBG
  if maxm == -1
    print prod
    exit
  end
  i = maxm - 1
  prod |= (1 << maxm)

  c = Array.new(maxm)
  for j in 0...maxm
    c[j] = []
  end
  #for x in b[maxm]
  #  for m in 0...maxm
  #    c[m] << x if (1 << m) & x != 0
  #  end
  #end
  #b = c
  for x in b
    next if x.size < k
    x.reject!{|y| (1 << maxm) & y == 0}
  end

end
