n, m = gets.chomp.split.map(&:to_i) a = gets.to_i as = (2..n).map { gets.to_i }.sort.reverse def ok(a, m, as, ignore_index) k = 0 left = 0 right = as.size - 1 left += 1 if left == ignore_index right -= 1 if right == ignore_index while left < right if as[left] + as[right] > a k += 1 left += 1 right -= 1 else right -= 1 end left += 1 if left == ignore_index right -= 1 if right == ignore_index end # p ['ok-check', [a,m,as,ignore_index], k, (k <= m)] k < m end ans = -1 left = 0 right = n - 2 if ok(a + as[left], m, as, left) if ok(a + as[right], m, as, right) p as[right] else # bisearch 30.times do mid = (left + right) / 2 if ok(a + as[mid], m, as, mid) left = mid else right = mid end end p as[left] end else p -1 end