K, N = map(int, input().split())
lengths = [int(input()) for _ in range(K)]

# 랜선의 최솟값은 1, 최댓값은 주어진 랜선 길이의 max 값
min_length = 1; max_length = max(lengths)
result = 0

while(min_length <= max_length):
    mean_length = (min_length + max_length) // 2
    
    cut_num = 0
    for length in lengths:
        cut_num += length // mean_length
    
    # 잘라진 랜선 개수가 N보다 많으면,
    # mean_length 밑에 존재하는 길이는 볼 필요가 없음.
    if(cut_num >= N):
        result = mean_length
        min_length = mean_length + 1

    # 잘라진 랜선 개수가 부족하다면,
    # mean_length 위에 존재하는 길이로는 조건을 만족할 수 없음.
    elif(cut_num < N):
        max_length = mean_length - 1
    
print(result)

'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글

백준 2606번(python)  (0) 2020.08.01
백준 2805번(python)  (0) 2020.07.27
백준 10816번(python)  (0) 2020.07.19
백준 1920번(python)  (0) 2020.07.19
백준 2261번(python)  (1) 2020.07.17