from math import *

f=lambda:[*list(map(int,input().split()))]

n,k=f()

a=f()

def ok(x):

  c=0

  for i in a:

    c+=ceil(i/x)

  return c<=n+k

l,r=0,10**9+1

while r-l>0.1:

  m=(l+r)/2

  if ok(m): r=m

  else: l=m

t=ceil(r)

print((t-ok(t-1) if t>1 else t))
from math import *

f=lambda:[*list(map(int,input().split()))]

n,k=f()

a=f()

def ok(x):

  c=0

  for i in a:

    c+=ceil(i/x)

  return c<=n+k

l,r=0,10**9

while r-l>1:

  m=(l+r)/2

  if ok(m): r=m

  else: l=m

t=ceil(r)

print((t-ok(t-1) if t>1 else t))
from math import *

f = lambda: [*list(map(int, input().split()))]
n, k = f()
a = f()


def ok(x):
    c = 0
    for i in a:
        c += ceil(i / x)
    return c <= n + k


l, r = 0, 10**9 + 1
while r - l > 0.1:
    m = (l + r) / 2
    if ok(m):
        r = m
    else:
        l = m
t = ceil(r)
print((t - ok(t - 1) if t > 1 else t))

from math import *

f = lambda: [*list(map(int, input().split()))]
n, k = f()
a = f()


def ok(x):
    c = 0
    for i in a:
        c += ceil(i / x)
    return c <= n + k


l, r = 0, 10**9
while r - l > 1:
    m = (l + r) / 2
    if ok(m):
        r = m
    else:
        l = m
t = ceil(r)
print((t - ok(t - 1) if t > 1 else t))

-l, r = 0, 10**9 + 1 -while r - l > 0.1: +l, r = 0, 10**9 +while r - l > 1: