n, k = map(int, input().split())
A = tuple(map(int, input().split()))
A = sorted(A, reverse=True)

l = 0
r = max(A)+1
def cut(l, k):
    # 長さlの丸太を最大とすることができるかどうかを返す
    for a in A:
        if a > l:
            k -= (-(-a//l) - 1)
    return k >= 0

while r-l > 1:
    mid = (r+l)//2
    if cut(mid, k):
        r = mid
    else:
        l = mid
print(r) n, k = map(int, input().split()) n map(int, input().split()) map int input().split() ().split () input split k A = tuple(map(int, input().split())) A tuple(map(int, input().split())) tuple map(int, input().split()) map int input().split() ().split () input split A = sorted(A, reverse=True) A sorted(A, reverse=True) sorted A reverse=True reverse True l = 0 l 0 r = max(A)+1 r max(A)+1 max(A) max A 1 def cut(l, k):
    # 長さlの丸太を最大とすることができるかどうかを返す
    for a in A:
        if a > l:
            k -= (-(-a//l) - 1)
    return k >= 0 cut for a in A:
        if a > l:
            k -= (-(-a//l) - 1)
     a A if a > l:
            k -= (-(-a//l) - 1)
     a > l a l k -= (-(-a//l) - 1) k -(-a//l) - 1 -(-a//l) -a//l -a a l 1 return k >= 0 k >= 0 k 0 l l k k while r-l > 1:
    mid = (r+l)//2
    if cut(mid, k):
        r = mid
    else:
        l = mid r-l > 1 r-l r l 1 mid = (r+l)//2 mid (r+l)//2 r+l r l 2 if cut(mid, k):
        r = mid
    else:
        l = mid cut(mid, k) cut mid k r = mid r mid l = mid l mid print(r) print r A = sorted(A, reverse=True) sorted(A, reverse=True) A r = max(A)+1 max(A)+1 r k = map(int, input().split()) map(int, input().split()) k r = mid mid r l = mid mid l def cut(l, k):
    # 長さlの丸太を最大とすることができるかどうかを返す
    for a in A:
        if a > l:
            k -= (-(-a//l) - 1)
    return k >= 0 def cut(l, k):
    # 長さlの丸太を最大とすることができるかどうかを返す
    for a in A:
        if a > l:
            k -= (-(-a//l) - 1)
    return k >= 0 cut A = tuple(map(int, input().split())) tuple(map(int, input().split())) A l = 0 0 l mid = (r+l)//2 (r+l)//2 mid n, k = map(int, input().split()) map(int, input().split()) n
n, k = map(int, input().split())
A = tuple(map(int, input().split()))
A = sorted(A, reverse=True)

l = 0
r = max(A)+1
def cut(l, k):
    # 長さlの丸太を最大とすることができるかどうかを返す
    for a in A:
        if a > l:
            k -= (-(-a//l) - 1)
    return k >= 0

while r-l > 1:
    mid = (r+l)//2
    if cut(mid, k):
        r = mid
    else:
        l = mid
print(r)