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

# xは求める長さ
def C(x):
    num = 0
    for i in range(n):
        # (a[i]-1)//x 回切る必要がある
        num += (l[i]-1)//x
    # k回以内に収まるか
    return num <= k

lb,ub = 0,max(l)
for i in range(100):
    mid = (lb + ub) / 2
    # 条件を満たすならxを小さくしていく
    if C(mid):
        ub = mid
    else:
        lb = mid
    # print(lb,ub)

import math
ans = math.ceil(ub)
print(ans) n,k = map(int,input().split()) n map(int,input().split()) map int input().split() ().split () input split k l = list(map(int,input().split())) l list(map(int,input().split())) list map(int,input().split()) map int input().split() ().split () input split def C(x):
    num = 0
    for i in range(n):
        # (a[i]-1)//x 回切る必要がある
        num += (l[i]-1)//x
    # k回以内に収まるか
    return num <= k C num = 0 num 0 for i in range(n):
        # (a[i]-1)//x 回切る必要がある
        num += (l[i]-1)//x
    # k回以内に収まるか
     i range(n) range n num += (l[i]-1)//x num (l[i]-1)//x l[i]-1 l[i] l i 1 x return num <= k num <= k num k x x lb,ub = 0,max(l) lb 0 ub max(l) max l for i in range(100):
    mid = (lb + ub) / 2
    # 条件を満たすならxを小さくしていく
    if C(mid):
        ub = mid
    else:
        lb = mid
    # print(lb,ub) i range(100) range 100 mid = (lb + ub) / 2 mid (lb + ub) / 2 lb + ub lb ub 2 if C(mid):
        ub = mid
    else:
        lb = mid
    # print(lb,ub) C(mid) C mid ub = mid ub mid lb = mid lb mid import math math ans = math.ceil(ub) ans math.ceil(ub) math.ceil math ceil ub print(ans) print ans ub = 0,max(l) max(l) ub k = map(int,input().split()) map(int,input().split()) k lb = mid mid lb ub = mid mid ub l = list(map(int,input().split())) list(map(int,input().split())) l mid = (lb + ub) / 2 (lb + ub) / 2 mid def C(x):
    num = 0
    for i in range(n):
        # (a[i]-1)//x 回切る必要がある
        num += (l[i]-1)//x
    # k回以内に収まるか
    return num <= k def C(x):
    num = 0
    for i in range(n):
        # (a[i]-1)//x 回切る必要がある
        num += (l[i]-1)//x
    # k回以内に収まるか
    return num <= k C lb,ub = 0,max(l) 0 lb n,k = map(int,input().split()) map(int,input().split()) n ans = math.ceil(ub) math.ceil(ub) ans
n,k = map(int,input().split())
l = list(map(int,input().split()))

# xは求める長さ
def C(x):
    num = 0
    for i in range(n):
        # (a[i]-1)//x 回切る必要がある
        num += (l[i]-1)//x
    # k回以内に収まるか
    return num <= k

lb,ub = 0,max(l)
for i in range(100):
    mid = (lb + ub) / 2
    # 条件を満たすならxを小さくしていく
    if C(mid):
        ub = mid
    else:
        lb = mid
    # print(lb,ub)

import math
ans = math.ceil(ub)
print(ans)