import sys, os, math, bisect, itertools, collections, heapq, queue
# from scipy.sparse.csgraph import csgraph_from_dense, floyd_warshall
from decimal import Decimal
from collections import defaultdict, deque
import copy

sys.setrecursionlimit(10000000)

ii = lambda: int(sys.stdin.buffer.readline().rstrip())
il = lambda: list(map(int, sys.stdin.buffer.readline().split()))
fl = lambda: list(map(float, sys.stdin.buffer.readline().split()))
iln = lambda n: [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)]

iss = lambda: sys.stdin.buffer.readline().decode().rstrip()
sl = lambda: list(map(str, sys.stdin.buffer.readline().decode().split()))
isn = lambda n: [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)]

lcm = lambda x, y: (x * y) // math.gcd(x, y)

MOD = 10 ** 9 + 7
MAX = float('inf')


def req_count(P, K, W):
    cnt = 0
    for k in range(K):
        p = 0
        while p + W[cnt] <= P:
            p += W[cnt]
            cnt += 1
            if cnt == len(W):
                return cnt
    else:
        return cnt


def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    N, K = il()
    W = [ii() for _ in range(N)]

    left, right = 0, sum(W)
    while right - left != 1:
        middle = (left + right) // 2
        n = req_count(middle, K, W)
        if n >= N:
            right = middle
        else:
            left = middle
    print(right)


if __name__ == '__main__':
    main()
 import sys, os, math, bisect, itertools, collections, heapq, queue sys os math bisect itertools collections heapq queue from decimal import Decimal from collections import defaultdict, deque import copy copy sys.setrecursionlimit(10000000) sys.setrecursionlimit sys setrecursionlimit 10000000 ii = lambda: int(sys.stdin.buffer.readline().rstrip()) ii lambda: int(sys.stdin.buffer.readline().rstrip()) int(sys.stdin.buffer.readline().rstrip()) int sys.stdin.buffer.readline().rstrip() sys.stdin.buffer.readline().rstrip sys.stdin.buffer.readline() sys.stdin.buffer.readline sys.stdin.buffer sys.stdin sys stdin buffer readline rstrip il = lambda: list(map(int, sys.stdin.buffer.readline().split())) il lambda: list(map(int, sys.stdin.buffer.readline().split())) list(map(int, sys.stdin.buffer.readline().split())) list map(int, sys.stdin.buffer.readline().split()) map int sys.stdin.buffer.readline().split() sys.stdin.buffer.readline().split sys.stdin.buffer.readline() sys.stdin.buffer.readline sys.stdin.buffer sys.stdin sys stdin buffer readline split fl = lambda: list(map(float, sys.stdin.buffer.readline().split())) fl lambda: list(map(float, sys.stdin.buffer.readline().split())) list(map(float, sys.stdin.buffer.readline().split())) list map(float, sys.stdin.buffer.readline().split()) map float sys.stdin.buffer.readline().split() sys.stdin.buffer.readline().split sys.stdin.buffer.readline() sys.stdin.buffer.readline sys.stdin.buffer sys.stdin sys stdin buffer readline split int(sys.stdin.buffer.readline().rstrip()) for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) int(sys.stdin.buffer.readline().rstrip()) int sys.stdin.buffer.readline().rstrip() sys.stdin.buffer.readline().rstrip sys.stdin.buffer.readline() sys.stdin.buffer.readline sys.stdin.buffer sys.stdin sys stdin buffer readline rstrip iln = lambda n: [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)] iln lambda n: [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)] [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)] n iss = lambda: sys.stdin.buffer.readline().decode().rstrip() iss lambda: sys.stdin.buffer.readline().decode().rstrip() sys.stdin.buffer.readline().decode().rstrip() sys.stdin.buffer.readline().decode().rstrip sys.stdin.buffer.readline().decode() sys.stdin.buffer.readline().decode sys.stdin.buffer.readline() sys.stdin.buffer.readline sys.stdin.buffer sys.stdin sys stdin buffer readline decode rstrip sl = lambda: list(map(str, sys.stdin.buffer.readline().decode().split())) sl lambda: list(map(str, sys.stdin.buffer.readline().decode().split())) list(map(str, sys.stdin.buffer.readline().decode().split())) list map(str, sys.stdin.buffer.readline().decode().split()) map str sys.stdin.buffer.readline().decode().split() sys.stdin.buffer.readline().decode().split sys.stdin.buffer.readline().decode() sys.stdin.buffer.readline().decode sys.stdin.buffer.readline() sys.stdin.buffer.readline sys.stdin.buffer sys.stdin sys stdin buffer readline decode split sys.stdin.buffer.readline().decode().rstrip() for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) sys.stdin.buffer.readline().decode().rstrip() sys.stdin.buffer.readline().decode().rstrip sys.stdin.buffer.readline().decode() sys.stdin.buffer.readline().decode sys.stdin.buffer.readline() sys.stdin.buffer.readline sys.stdin.buffer sys.stdin sys stdin buffer readline decode rstrip isn = lambda n: [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)] isn lambda n: [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)] [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)] n lcm = lambda x, y: (x * y) // math.gcd(x, y) lcm lambda x, y: (x * y) // math.gcd(x, y) (x * y) // math.gcd(x, y) x * y x y math.gcd(x, y) math.gcd math gcd x y x y MOD = 10 ** 9 + 7 MOD 10 ** 9 + 7 10 ** 9 10 9 7 MAX = float('inf') MAX float('inf') float 'inf' def req_count(P, K, W):
    cnt = 0
    for k in range(K):
        p = 0
        while p + W[cnt] <= P:
            p += W[cnt]
            cnt += 1
            if cnt == len(W):
                return cnt
    else:
        return cnt req_count cnt = 0 cnt 0 for k in range(K):
        p = 0
        while p + W[cnt] <= P:
            p += W[cnt]
            cnt += 1
            if cnt == len(W):
                return cnt
    else:
        return cnt k range(K) range K p = 0 p 0 while p + W[cnt] <= P:
            p += W[cnt]
            cnt += 1
            if cnt == len(W):
                return cnt
     p + W[cnt] <= P p + W[cnt] p W[cnt] W cnt P p += W[cnt] p W[cnt] W cnt cnt += 1 cnt 1 if cnt == len(W):
                return cnt
     cnt == len(W) cnt len(W) len W return cnt cnt return cnt cnt P P K K W W def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    N, K = il()
    W = [ii() for _ in range(N)]

    left, right = 0, sum(W)
    while right - left != 1:
        middle = (left + right) // 2
        n = req_count(middle, K, W)
        if n >= N:
            right = middle
        else:
            left = middle
    print(right) main if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

     os.getenv("LOCAL") os.getenv os getenv "LOCAL" sys.stdin = open("input.txt", "r") sys.stdin sys stdin open("input.txt", "r") open "input.txt" "r" N, K = il() N il() il K ii() for _ in range(N) for _ in range(N) _ range(N) range N for _ in range(N) ii() ii W = [ii() for _ in range(N)] W [ii() for _ in range(N)] left, right = 0, sum(W) left 0 right sum(W) sum W while right - left != 1:
        middle = (left + right) // 2
        n = req_count(middle, K, W)
        if n >= N:
            right = middle
        else:
            left = middle
     right - left != 1 right - left right left 1 middle = (left + right) // 2 middle (left + right) // 2 left + right left right 2 n = req_count(middle, K, W) n req_count(middle, K, W) req_count middle K W if n >= N:
            right = middle
        else:
            left = middle
     n >= N n N right = middle right middle left = middle left middle print(right) print right if __name__ == '__main__':
    main() __name__ == '__main__' __name__ '__main__' main() main iln = lambda n: [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)] lambda n: [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)] iln isn = lambda n: [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)] lambda n: [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)] isn def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    N, K = il()
    W = [ii() for _ in range(N)]

    left, right = 0, sum(W)
    while right - left != 1:
        middle = (left + right) // 2
        n = req_count(middle, K, W)
        if n >= N:
            right = middle
        else:
            left = middle
    print(right) def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    N, K = il()
    W = [ii() for _ in range(N)]

    left, right = 0, sum(W)
    while right - left != 1:
        middle = (left + right) // 2
        n = req_count(middle, K, W)
        if n >= N:
            right = middle
        else:
            left = middle
    print(right) main ii = lambda: int(sys.stdin.buffer.readline().rstrip()) lambda: int(sys.stdin.buffer.readline().rstrip()) ii fl = lambda: list(map(float, sys.stdin.buffer.readline().split())) lambda: list(map(float, sys.stdin.buffer.readline().split())) fl iss = lambda: sys.stdin.buffer.readline().decode().rstrip() lambda: sys.stdin.buffer.readline().decode().rstrip() iss lcm = lambda x, y: (x * y) // math.gcd(x, y) lambda x, y: (x * y) // math.gcd(x, y) lcm def req_count(P, K, W):
    cnt = 0
    for k in range(K):
        p = 0
        while p + W[cnt] <= P:
            p += W[cnt]
            cnt += 1
            if cnt == len(W):
                return cnt
    else:
        return cnt def req_count(P, K, W):
    cnt = 0
    for k in range(K):
        p = 0
        while p + W[cnt] <= P:
            p += W[cnt]
            cnt += 1
            if cnt == len(W):
                return cnt
    else:
        return cnt req_count il = lambda: list(map(int, sys.stdin.buffer.readline().split())) lambda: list(map(int, sys.stdin.buffer.readline().split())) il MOD = 10 ** 9 + 7 10 ** 9 + 7 MOD sl = lambda: list(map(str, sys.stdin.buffer.readline().decode().split())) lambda: list(map(str, sys.stdin.buffer.readline().decode().split())) sl MAX = float('inf') float('inf') MAX
import sys, os, math, bisect, itertools, collections, heapq, queue
# from scipy.sparse.csgraph import csgraph_from_dense, floyd_warshall
from decimal import Decimal
from collections import defaultdict, deque
import copy

sys.setrecursionlimit(10000000)

ii = lambda: int(sys.stdin.buffer.readline().rstrip())
il = lambda: list(map(int, sys.stdin.buffer.readline().split()))
fl = lambda: list(map(float, sys.stdin.buffer.readline().split()))
iln = lambda n: [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)]

iss = lambda: sys.stdin.buffer.readline().decode().rstrip()
sl = lambda: list(map(str, sys.stdin.buffer.readline().decode().split()))
isn = lambda n: [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)]

lcm = lambda x, y: (x * y) // math.gcd(x, y)

MOD = 10 ** 9 + 7
MAX = float('inf')


def req_count(P, K, W):
    cnt = 0
    for k in range(K):
        p = 0
        while p + W[cnt] <= P:
            p += W[cnt]
            cnt += 1
            if cnt == len(W):
                return cnt
    else:
        return cnt


def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    N, K = il()
    W = [ii() for _ in range(N)]

    left, right = 0, sum(W)
    while right - left != 1:
        middle = (left + right) // 2
        n = req_count(middle, K, W)
        if n >= N:
            right = middle
        else:
            left = middle
    print(right)


if __name__ == '__main__':
    main()

