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

def isOK(X):
    if X<=0:
        return False
    return sum([-a//X*-1-1 for a in A])<=K


ok=10**10
ng=-1
while abs(ok-ng)>1:
    mid=(ok+ng)//2
    if isOK(mid):
        ok=mid
    else:
        ng=mid
print(ok) f=lambda:map(int,input().split()) f lambda:map(int,input().split()) map(int,input().split()) map int input().split() ().split () input split N,K=f() N f() f K A=list(f()) A list(f()) list f() f def isOK(X):
    if X<=0:
        return False
    return sum([-a//X*-1-1 for a in A])<=K isOK if X<=0:
        return False
     X<=0 X 0 return False False -a//X*-1-1 for a in A for a in A a A for a in A -a//X*-1-1 -a//X*-1 -a//X -a a X -1 1 return sum([-a//X*-1-1 for a in A])<=K sum([-a//X*-1-1 for a in A])<=K sum([-a//X*-1-1 for a in A]) sum [-a//X*-1-1 for a in A] K X X ok=10**10 ok 10**10 10 10 ng=-1 ng -1 while abs(ok-ng)>1:
    mid=(ok+ng)//2
    if isOK(mid):
        ok=mid
    else:
        ng=mid abs(ok-ng)>1 abs(ok-ng) abs ok-ng ok ng 1 mid=(ok+ng)//2 mid (ok+ng)//2 ok+ng ok ng 2 if isOK(mid):
        ok=mid
    else:
        ng=mid isOK(mid) isOK mid ok=mid ok mid ng=mid ng mid print(ok) print ok ok=10**10 10**10 ok f=lambda:map(int,input().split()) lambda:map(int,input().split()) f K=f() f() K N,K=f() f() N mid=(ok+ng)//2 (ok+ng)//2 mid A=list(f()) list(f()) A ng=-1 -1 ng def isOK(X):
    if X<=0:
        return False
    return sum([-a//X*-1-1 for a in A])<=K def isOK(X):
    if X<=0:
        return False
    return sum([-a//X*-1-1 for a in A])<=K isOK ng=mid mid ng ok=mid mid ok
f=lambda:map(int,input().split())
N,K=f()
A=list(f())

def isOK(X):
    if X<=0:
        return False
    return sum([-a//X*-1-1 for a in A])<=K


ok=10**10
ng=-1
while abs(ok-ng)>1:
    mid=(ok+ng)//2
    if isOK(mid):
        ok=mid
    else:
        ng=mid
print(ok)