import math
N, K = map(int,input().split())
A = [int(i) for i in input().split()]

if K == 0:
    print(max(A))
else:
    low = 0
    high = max(A)
    while high - low > 0.1:
        mid = (low + high) / 2
        times = 0
        for a in A:
            times += math.ceil(a / mid) - 1
        if K >= times:
            high = mid
        else:
            low = mid
        #print(mid)

    ans = int(mid)
    if not ans:
        print(1)
    else:
        times = 0
        for a in A:
            times += math.ceil(a / ans) - 1
        if times <= K:
            print(ans)
        else:
            print(ans+1) import math math N, K = map(int,input().split()) N map(int,input().split()) map int input().split() ().split () input split K int(i) for i in input().split() for i in input().split() i input().split() ().split () input split for i in input().split() int(i) int i A = [int(i) for i in input().split()] A [int(i) for i in input().split()] if K == 0:
    print(max(A))
else:
    low = 0
    high = max(A)
    while high - low > 0.1:
        mid = (low + high) / 2
        times = 0
        for a in A:
            times += math.ceil(a / mid) - 1
        if K >= times:
            high = mid
        else:
            low = mid
        #print(mid)

    ans = int(mid)
    if not ans:
        print(1)
    else:
        times = 0
        for a in A:
            times += math.ceil(a / ans) - 1
        if times <= K:
            print(ans)
        else:
            print(ans+1) K == 0 K 0 print(max(A)) print max(A) max A low = 0 low 0 high = max(A) high max(A) max A while high - low > 0.1:
        mid = (low + high) / 2
        times = 0
        for a in A:
            times += math.ceil(a / mid) - 1
        if K >= times:
            high = mid
        else:
            low = mid
        #print(mid)

     high - low > 0.1 high - low high low 0.1 mid = (low + high) / 2 mid (low + high) / 2 low + high low high 2 times = 0 times 0 for a in A:
            times += math.ceil(a / mid) - 1
         a A times += math.ceil(a / mid) - 1 times math.ceil(a / mid) - 1 math.ceil(a / mid) math.ceil math ceil a / mid a mid 1 if K >= times:
            high = mid
        else:
            low = mid
        #print(mid)

     K >= times K times high = mid high mid low = mid low mid ans = int(mid) ans int(mid) int mid if not ans:
        print(1)
    else:
        times = 0
        for a in A:
            times += math.ceil(a / ans) - 1
        if times <= K:
            print(ans)
        else:
            print(ans+1) not ans ans print(1) print 1 times = 0 times 0 for a in A:
            times += math.ceil(a / ans) - 1
         a A times += math.ceil(a / ans) - 1 times math.ceil(a / ans) - 1 math.ceil(a / ans) math.ceil math ceil a / ans a ans 1 if times <= K:
            print(ans)
        else:
            print(ans+1) times <= K times K print(ans) print ans print(ans+1) print ans+1 ans 1 high = mid mid high times += math.ceil(a / ans) - 1 math.ceil(a / ans) - 1 times mid = (low + high) / 2 (low + high) / 2 mid low = mid mid low times += math.ceil(a / mid) - 1 math.ceil(a / mid) - 1 times N, K = map(int,input().split()) map(int,input().split()) N low = 0 0 low K = map(int,input().split()) map(int,input().split()) K ans = int(mid) int(mid) ans high = max(A) max(A) high times = 0 0 times times = 0 0 times A = [int(i) for i in input().split()] [int(i) for i in input().split()] A
import math
N, K = map(int,input().split())
A = [int(i) for i in input().split()]

if K == 0:
    print(max(A))
else:
    low = 0
    high = max(A)
    while high - low > 0.1:
        mid = (low + high) / 2
        times = 0
        for a in A:
            times += math.ceil(a / mid) - 1
        if K >= times:
            high = mid
        else:
            low = mid
        #print(mid)

    ans = int(mid)
    if not ans:
        print(1)
    else:
        times = 0
        for a in A:
            times += math.ceil(a / ans) - 1
        if times <= K:
            print(ans)
        else:
            print(ans+1)
