```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)
}
```