← Home
```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

func readInt(reader *bufio.Reader) int {
	res := 0
	for {
		b, err := reader.ReadByte()
		if err != nil {
			return res
		}
		if b >= '0' && b <= '9' {
			res = int(b - '0')
			break
		}
	}
	for {
		b, err := reader.ReadByte()
		if err != nil || b < '0' || b > '9' {
			break
		}
		res = res*10 + int(b-'0')
	}
	return res
}

func readInt64(reader *bufio.Reader) int64 {
	var res int64 = 0
	for {
		b, err := reader.ReadByte()
		if err != nil {
			return res
		}
		if b >= '0' && b <= '9' {
			res = int64(b - '0')
			break
		}
	}
	for {
		b, err := reader.ReadByte()
		if err != nil || b < '0' || b > '9' {
			break
		}
		res = res*10 + int64(b-'0')
	}
	return res
}

func main() {
	reader := bufio.NewReaderSize(os.Stdin, 64*1024)
	n := readInt(reader)
	if n == 0 {
		return
	}
	k := readInt64(reader)

	maxA := 0
	a := make([]int, n)
	for i := 0; i < n; i++ {
		a[i] = readInt(reader)
		if a[i] > maxA {
			maxA = a[i]
		}
	}

	aCount := make([]int32, maxA+2)
	c := make([]int64, maxA+2)

	for i := 0; i < n; i++ {
		aCount[a[i]]++
		c[a[i]]++
	}

	for v := maxA; v >= 2; v-- {
		if c[v] > 0 {
			half1 := v / 2
			half2 := (v + 1) / 2
			c[half1] += c[v]
			c[half2] += c[v]
		}
	}

	for v := maxA; v >= 1; v-- {
		c[v] += c[v+1]
	}

	ans := -1
	var currentSA int64 = 0

	for x := maxA; x >= 1; x-- {
		currentSA += int64(aCount[x])
		var scVal int64 = 0
		if 2*x <= maxA {
			scVal = c[2*x]
		}
		if currentSA+scVal >= k {
			ans = x
			break
		}
	}

	fmt.Println(ans)
}
```