
# ?????§?????????P???K??°?????????????????§???????????????????????????????
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 solve():
    left = 0
    right = sum(w) + 1 # ??????????????°???* 1????????????????????§??????
    while right - left > 1:
        mid = (left + right) / 2
        v = check(mid)  # mid == P ??¨???????????§???????????????????????????
        if v >= n:
            right = mid
        else:
            left = mid
            
    return right

if __name__ == "__main__":
    n, k = map(int, input().split())
    w = [int(input()) for i in range(n)]
    print(int(solve())) 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 def solve():
    left = 0
    right = sum(w) + 1 # ??????????????°???* 1????????????????????§??????
    while right - left > 1:
        mid = (left + right) / 2
        v = check(mid)  # mid == P ??¨???????????§???????????????????????????
        if v >= n:
            right = mid
        else:
            left = mid
            
    return right solve left = 0 left 0 right = sum(w) + 1 right sum(w) + 1 sum(w) sum w 1 while right - left > 1:
        mid = (left + right) / 2
        v = check(mid)  # mid == P ??¨???????????§???????????????????????????
        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 if __name__ == "__main__":
    n, k = map(int, input().split())
    w = [int(input()) for i in range(n)]
    print(int(solve())) __name__ == "__main__" __name__ "__main__" 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 w = [int(input()) for i in range(n)] w [int(input()) for i in range(n)] print(int(solve())) print int(solve()) int solve() solve k = map(int, input().split()) map(int, input().split()) k def solve():
    left = 0
    right = sum(w) + 1 # ??????????????°???* 1????????????????????§??????
    while right - left > 1:
        mid = (left + right) / 2
        v = check(mid)  # mid == P ??¨???????????§???????????????????????????
        if v >= n:
            right = mid
        else:
            left = mid
            
    return right def solve():
    left = 0
    right = sum(w) + 1 # ??????????????°???* 1????????????????????§??????
    while right - left > 1:
        mid = (left + right) / 2
        v = check(mid)  # mid == P ??¨???????????§???????????????????????????
        if v >= n:
            right = mid
        else:
            left = mid
            
    return right solve n, k = map(int, input().split()) map(int, input().split()) n w = [int(input()) for i in range(n)] [int(input()) for i in range(n)] w 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

# ?????§?????????P???K??°?????????????????§???????????????????????????????
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 solve():
    left = 0
    right = sum(w) + 1 # ??????????????°???* 1????????????????????§??????
    while right - left > 1:
        mid = (left + right) / 2
        v = check(mid)  # mid == P ??¨???????????§???????????????????????????
        if v >= n:
            right = mid
        else:
            left = mid
            
    return right

if __name__ == "__main__":
    n, k = map(int, input().split())
    w = [int(input()) for i in range(n)]
    print(int(solve()))