n, k = map(int, input().split())
w = [int(input()) for _ in range(n)]

# k台以内のトラックで運べる荷物の個数
# P: ひとつのトラックに積載できる最大量
def check(P):
	i = 0
	for j in range(k):
		s = 0
		while s + w[i] <= P:
			s += w[i]
			i += 1
			if i == n:
				return n
	return i

# 二部探索
left = 0
right = 100000 * 10000
while right - left > 1:
	mid = (left + right) // 2
	v = check(mid)
	if v >= n:
		right = mid
	else:
		left = mid

print(right) n, k = map(int, input().split()) n map(int, input().split()) map int input().split() ().split () input split k int(input()) for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) int(input()) int input() input w = [int(input()) for _ in range(n)] w [int(input()) for _ in range(n)] def check(P):
	i = 0
	for j in range(k):
		s = 0
		while s + w[i] <= P:
			s += w[i]
			i += 1
			if i == n:
				return n
	return i

# 二部探索 check i = 0 i 0 for j in range(k):
		s = 0
		while s + w[i] <= P:
			s += w[i]
			i += 1
			if i == n:
				return n
	 j range(k) range k s = 0 s 0 while s + w[i] <= P:
			s += w[i]
			i += 1
			if i == n:
				return n
	 s + w[i] <= P s + w[i] s w[i] w i P s += w[i] s w[i] w i i += 1 i 1 if i == n:
				return n
	 i == n i n return n n return i i P P left = 0 left 0 right = 100000 * 10000 right 100000 * 10000 100000 10000 while right - left > 1:
	mid = (left + right) // 2
	v = check(mid)
	if v >= n:
		right = mid
	else:
		left = mid right - left > 1 right - left right left 1 mid = (left + right) // 2 mid (left + right) // 2 left + right left right 2 v = check(mid) v check(mid) check mid if v >= n:
		right = mid
	else:
		left = mid v >= n v n right = mid right mid left = mid left mid print(right) print right left = 0 0 left left = mid mid left k = map(int, input().split()) map(int, input().split()) k right = mid mid right mid = (left + right) // 2 (left + right) // 2 mid def check(P):
	i = 0
	for j in range(k):
		s = 0
		while s + w[i] <= P:
			s += w[i]
			i += 1
			if i == n:
				return n
	return i

# 二部探索 def check(P):
	i = 0
	for j in range(k):
		s = 0
		while s + w[i] <= P:
			s += w[i]
			i += 1
			if i == n:
				return n
	return i

# 二部探索 check right = 100000 * 10000 100000 * 10000 right n, k = map(int, input().split()) map(int, input().split()) n v = check(mid) check(mid) v w = [int(input()) for _ in range(n)] [int(input()) for _ in range(n)] w
n, k = map(int, input().split())
w = [int(input()) for _ in range(n)]

# k台以内のトラックで運べる荷物の個数
# P: ひとつのトラックに積載できる最大量
def check(P):
	i = 0
	for j in range(k):
		s = 0
		while s + w[i] <= P:
			s += w[i]
			i += 1
			if i == n:
				return n
	return i

# 二部探索
left = 0
right = 100000 * 10000
while right - left > 1:
	mid = (left + right) // 2
	v = check(mid)
	if v >= n:
		right = mid
	else:
		left = mid

print(right)
