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

def check(P):
	global n, k, L
	i = 0
	for j in range(k):
		s = 0
		while s + L[i] <= P:
			s += L[i]
			i += 1
			if i == n:
				return n
	return i

def solve():
	left = 0
	right = 100000 * 10000

	while right - left > 1:
		mid = (left + right) // 2
		v = check(mid)
		if v >= n:
			right = mid
		else:
			left = mid

	return right

print(solve())
 n, k = map(int, input().split()) n map(int, input().split()) map int input().split() ().split () input split k int(input()) for i in range(n) for i in range(n) i range(n) range n for i in range(n) int(input()) int input() input L = [int(input()) for i in range(n)] L [int(input()) for i in range(n)] def check(P):
	global n, k, L
	i = 0
	for j in range(k):
		s = 0
		while s + L[i] <= P:
			s += L[i]
			i += 1
			if i == n:
				return n
	return i check global n, k, L i = 0 i 0 for j in range(k):
		s = 0
		while s + L[i] <= P:
			s += L[i]
			i += 1
			if i == n:
				return n
	 j range(k) range k s = 0 s 0 while s + L[i] <= P:
			s += L[i]
			i += 1
			if i == n:
				return n
	 s + L[i] <= P s + L[i] s L[i] L i P s += L[i] s L[i] L i i += 1 i 1 if i == n:
				return n
	 i == n i n return n n return i i P P def solve():
	left = 0
	right = 100000 * 10000

	while right - left > 1:
		mid = (left + right) // 2
		v = check(mid)
		if v >= n:
			right = mid
		else:
			left = mid

	return right solve 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 return right right print(solve()) print solve() solve L = [int(input()) for i in range(n)] [int(input()) for i in range(n)] L def solve():
	left = 0
	right = 100000 * 10000

	while right - left > 1:
		mid = (left + right) // 2
		v = check(mid)
		if v >= n:
			right = mid
		else:
			left = mid

	return right def solve():
	left = 0
	right = 100000 * 10000

	while right - left > 1:
		mid = (left + right) // 2
		v = check(mid)
		if v >= n:
			right = mid
		else:
			left = mid

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

def check(P):
	global n, k, L
	i = 0
	for j in range(k):
		s = 0
		while s + L[i] <= P:
			s += L[i]
			i += 1
			if i == n:
				return n
	return i

def solve():
	left = 0
	right = 100000 * 10000

	while right - left > 1:
		mid = (left + right) // 2
		v = check(mid)
		if v >= n:
			right = mid
		else:
			left = mid

	return right

print(solve())

