#include <fstream>
using namespace std;
const int NMAX= 16000;
ifstream in( "transport.in" );
ofstream out( "transport.out" );
int N, K;
int v[NMAX+1];
int sol_max=0,sol_min=0;
bool verif( int x )
{
int sol= 1, aux= 0;
for( int i= 1; i<=N; ++i )
{
if( aux+v[i]<=x )
{
aux+= v[i];
}
else
{
++sol;
aux= v[i];
}
}
return sol<=K;
}
int main( )
{
in >> N >> K;
for( int i= 1; i<=N; ++i )
{
in >> v[i];
if( v[i]>sol_min )
{
sol_min= v[i];
}
sol_max+= v[i];
}
int step, sol;
for( step= 1; step<=sol_max; step*=2 );
for ( sol= sol_max; step>0; step/=2 )
{
if ( sol-step>=sol_min && verif(sol-step)==1 )
{
sol-= step;
}
}
out << sol << '\n';
return 0;
}