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: c += d

        else: break

    if c <= k: ok = m

    else: ng = 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)

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:
            c += d
        else:
            break
    if c <= k:
        ok = m
    else:
        ng = 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)

-        if d > 0: -            c += d -        else: +        if d == 0: +        c += d