# でつoO(YOU PLAY WITH THE CARDS YOU'RE DEALT..)
import sys
from math import ceil
def main(N, K, A):
    def cut_times(longest):
        return sum(a // longest for a in A if a > longest)
    under = 0
    r = 10**9
    for i in range(100):
        m = (under + r) / 2
        if cut_times(m) > K: under = m
        else: r = m
    print(ceil(r - 10**-10))

if __name__ == '__main__':
    input = sys.stdin.readline
    N, K = map(int, input().split())
    *A, = map(int, input().split())
    main(N, K, A) import sys sys from math import ceil def main(N, K, A):
    def cut_times(longest):
        return sum(a // longest for a in A if a > longest)
    under = 0
    r = 10**9
    for i in range(100):
        m = (under + r) / 2
        if cut_times(m) > K: under = m
        else: r = m
    print(ceil(r - 10**-10)) main def cut_times(longest):
        return sum(a // longest for a in A if a > longest)
     cut_times return sum(a // longest for a in A if a > longest) sum(a // longest for a in A if a > longest) sum a // longest a longest longest longest under = 0 under 0 r = 10**9 r 10**9 10 9 for i in range(100):
        m = (under + r) / 2
        if cut_times(m) > K: under = m
        else: r = m
     i range(100) range 100 m = (under + r) / 2 m (under + r) / 2 under + r under r 2 if cut_times(m) > K: under = m
        else: r = m
     cut_times(m) > K cut_times(m) cut_times m K print(ceil(r - 10**-10)) print ceil(r - 10**-10) ceil r - 10**-10 r 10**-10 10 -10 N N K K A A if __name__ == '__main__':
    input = sys.stdin.readline
    N, K = map(int, input().split())
    *A, = map(int, input().split())
    main(N, K, A) __name__ == '__main__' __name__ '__main__' input = sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline N, K = map(int, input().split()) N map(int, input().split()) map int input().split() ().split () input split K *A, = map(int, input().split()) *A A map(int, input().split()) map int input().split() ().split () input split main(N, K, A) main N K A def main(N, K, A):
    def cut_times(longest):
        return sum(a // longest for a in A if a > longest)
    under = 0
    r = 10**9
    for i in range(100):
        m = (under + r) / 2
        if cut_times(m) > K: under = m
        else: r = m
    print(ceil(r - 10**-10)) def main(N, K, A):
    def cut_times(longest):
        return sum(a // longest for a in A if a > longest)
    under = 0
    r = 10**9
    for i in range(100):
        m = (under + r) / 2
        if cut_times(m) > K: under = m
        else: r = m
    print(ceil(r - 10**-10)) main N, K = map(int, input().split()) map(int, input().split()) N input = sys.stdin.readline sys.stdin.readline input K = map(int, input().split()) map(int, input().split()) K
# でつoO(YOU PLAY WITH THE CARDS YOU'RE DEALT..)
import sys
from math import ceil
def main(N, K, A):
    def cut_times(longest):
        return sum(a // longest for a in A if a > longest)
    under = 0
    r = 10**9
    for i in range(100):
        m = (under + r) / 2
        if cut_times(m) > K: under = m
        else: r = m
    print(ceil(r - 10**-10))

if __name__ == '__main__':
    input = sys.stdin.readline
    N, K = map(int, input().split())
    *A, = map(int, input().split())
    main(N, K, A)
