n, k = list(map(int, input().split()))

A = [*list(map(int, input().split()))]

A.sort(reverse=True)

ng, ok = 0, 1<<30

while ok - ng > 1:

    m = (ng + ok) // 2

    c = 0

    for a in A:

        d = (a - 1) // m

        if d == 0: break

        c += d

    if c <= k: ok = m

    else: ng = m

print(ok)

_, k = list(map(int, input().split()))

A = [*list(map(int, input().split()))]

ng, ok = 0, 1<<30

while ok - ng > 1:

    m = (ng + ok) // 2

    if k < sum([(a-1)//m for a in A]): ng = m

    else: ok = m

print(ok)

n, k = list(map(int, input().split()))
A = [*list(map(int, input().split()))]
A.sort(reverse=True)
ng, ok = 0, 1 << 30
while ok - ng > 1:
    m = (ng + ok) // 2
    c = 0
    for a in A:
        d = (a - 1) // m
        if d == 0:
            break
        c += d
    if c <= k:
        ok = m
    else:
        ng = m
print(ok)

_, k = list(map(int, input().split()))
A = [*list(map(int, input().split()))]
ng, ok = 0, 1 << 30
while ok - ng > 1:
    m = (ng + ok) // 2
    if k < sum([(a - 1) // m for a in A]):
        ng = m
    else:
        ok = m
print(ok)

-n, k = list(map(int, input().split())) +_, k = list(map(int, input().split())) -A.sort(reverse=True) -    c = 0 -    for a in A: -        d = (a - 1) // m -        if d == 0: -            break -        c += d -    if c <= k: +    if k < sum([(a - 1) // m for a in A]): +        ng = m +    else: -    else: -        ng = m