N, K = map(int, input().split())
A = list(map(int, input().split()))

# 丸太がすべてxの長さ以下になる回数を出し、それがＫ回以下か判定する
def f(x):
    now = 0
    for i in range(N):
        now += (A[i]-1)//x
    return now <= K

l = 0
r = 10**9

while r-l > 1:
    mid = (r+l)//2
    if f(mid):
        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 = list(map(int, input().split())) A list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split def f(x):
    now = 0
    for i in range(N):
        now += (A[i]-1)//x
    return now <= K f now = 0 now 0 for i in range(N):
        now += (A[i]-1)//x
     i range(N) range N now += (A[i]-1)//x now (A[i]-1)//x A[i]-1 A[i] A i 1 x return now <= K now <= K now K x x l = 0 l 0 r = 10**9 r 10**9 10 9 while r-l > 1:
    mid = (r+l)//2
    if f(mid):
        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 f(mid):
        r = mid
    else:
        l = mid f(mid) f mid r = mid r mid l = mid l mid print(r) print r N, K = map(int, input().split()) map(int, input().split()) N mid = (r+l)//2 (r+l)//2 mid r = mid mid r l = mid mid l def f(x):
    now = 0
    for i in range(N):
        now += (A[i]-1)//x
    return now <= K def f(x):
    now = 0
    for i in range(N):
        now += (A[i]-1)//x
    return now <= K f A = list(map(int, input().split())) list(map(int, input().split())) A K = map(int, input().split()) map(int, input().split()) K r = 10**9 10**9 r l = 0 0 l
N, K = map(int, input().split())
A = list(map(int, input().split()))

# 丸太がすべてxの長さ以下になる回数を出し、それがＫ回以下か判定する
def f(x):
    now = 0
    for i in range(N):
        now += (A[i]-1)//x
    return now <= K

l = 0
r = 10**9

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