def check(List,mid):
    tmp=0
    for l in List:
        tmp+=(-(-l//mid)-1)
    return tmp

n,k=map(int,input().split())
a=list(map(int,input().split()))
lo=0
hi=max(a)+1

while hi - lo > 1:
    mid=(lo+hi)//2
    if check(a,mid)<=k:
        hi=mid
    else:
        lo=mid

print(hi) def check(List,mid):
    tmp=0
    for l in List:
        tmp+=(-(-l//mid)-1)
    return tmp check tmp=0 tmp 0 for l in List:
        tmp+=(-(-l//mid)-1)
     l List tmp+=(-(-l//mid)-1) tmp -(-l//mid)-1 -(-l//mid) -l//mid -l l mid 1 return tmp tmp List List mid mid 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 lo=0 lo 0 hi=max(a)+1 hi max(a)+1 max(a) max a 1 while hi - lo > 1:
    mid=(lo+hi)//2
    if check(a,mid)<=k:
        hi=mid
    else:
        lo=mid hi - lo > 1 hi - lo hi lo 1 mid=(lo+hi)//2 mid (lo+hi)//2 lo+hi lo hi 2 if check(a,mid)<=k:
        hi=mid
    else:
        lo=mid check(a,mid)<=k check(a,mid) check a mid k hi=mid hi mid lo=mid lo mid print(hi) print hi hi=max(a)+1 max(a)+1 hi a=list(map(int,input().split())) list(map(int,input().split())) a mid=(lo+hi)//2 (lo+hi)//2 mid lo=0 0 lo k=map(int,input().split()) map(int,input().split()) k hi=mid mid hi lo=mid mid lo def check(List,mid):
    tmp=0
    for l in List:
        tmp+=(-(-l//mid)-1)
    return tmp def check(List,mid):
    tmp=0
    for l in List:
        tmp+=(-(-l//mid)-1)
    return tmp check n,k=map(int,input().split()) map(int,input().split()) n
def check(List,mid):
    tmp=0
    for l in List:
        tmp+=(-(-l//mid)-1)
    return tmp

n,k=map(int,input().split())
a=list(map(int,input().split()))
lo=0
hi=max(a)+1

while hi - lo > 1:
    mid=(lo+hi)//2
    if check(a,mid)<=k:
        hi=mid
    else:
        lo=mid

print(hi)