/*
  题意:给定n,m,然后n个数字,要求一个最小的lim
  使得这连续n个数字可以被分为连续的m个集合,每个集合的和都不大于Lim
/*
#include <iostream>
#include <cstdio>
#define range(i,a,b) for (int i=a;i<=b;i++)
using namespace std;
const int maxn =100000;
int Cost[maxn+1];
int L,R;
int n,m;
bool check(int val)
{
    int sum(0);
    int ans(0);
    range(i,1,n)
        if (Cost[i]>val)
            return 0;
        else
        if (sum+Cost[i]<=val)
        {
            sum+=Cost[i];
        }
        else
        {
            sum=Cost[i];
            ans++;
        }
    if (sum!=0)
        ans++;
    return ans<=m;
}
int main()
{
    cin>>n>>m;
    L = R = 0;
    range(i,1,n)
    {
        scanf("%d",&Cost[i]);
        R+=Cost[i];
    }
    range(c,1,100)
    {
        int M = (L+R)>>1;
        if (check(M))
            R=M;
        else
            L=M;
    }
    if (check(L))
        cout<<L<<endl;
    else
        cout<<R<<endl;
    return 0;
}