← Home
```go
package main

import (
	"fmt"
	"io"
	"math/bits"
	"os"
)

func main() {
	buf, _ := io.ReadAll(os.Stdin)
	var pos int

	next := func() int {
		for pos < len(buf) && buf[pos] <= ' ' {
			pos++
		}
		if pos >= len(buf) {
			return 0
		}
		res := 0
		for pos < len(buf) && buf[pos] > ' ' {
			res = res*10 + int(buf[pos]-'0')
			pos++
		}
		return res
	}

	n := next()
	if n == 0 {
		return
	}
	k := next()

	A := make([]int, n)
	var sumA int64 = 0
	maxA := 0
	for i := 0; i < n; i++ {
		A[i] = next()
		if A[i] > maxA {
			maxA = A[i]
		}
		sumA += int64(A[i])
	}

	if int64(k) > sumA {
		fmt.Println("-1")
		return
	}

	ans := -1
	left := 1
	right := maxA

	for left <= right {
		mid := left + (right - left) / 2
		
		var total int64 = 0
		for i := 0; i < n; i++ {
			if A[i] >= mid {
				q := uint(A[i] / mid)
				d := bits.Len(q) - 1
				p1 := 1 << d
				p2 := A[i] - (1 << (d + 1)) * (mid - 1)
				if p2 > p1 {
					total += int64(p2)
				} else {
					total += int64(p1)
				}
			}
		}
		
		if total >= int64(k) {
			ans = mid
			left = mid + 1
		} else {
			right = mid - 1
		}
	}

	fmt.Println(ans)
}
```