int check( vector<int>a , int x , int p)
{
    int c = 0 , m = 0 , i  , n = a.size();
    for( i = 0 ; i < n ; i++)
    {
        if( m + a[i] <= x)
            m += a[i];
        else 
        {
            c++;
            m = a[i];
        }
    }
    if(  c <= ( p -1 ))
        return 1;
    return 0;
}
int books(vector<int> &A, int B)
{
    int i , u = -1 , s = 0 ;
    for( i = 0 ; i < A.size() ; i++)
       {
           u = max( u , A[i]);
           s += A[i];
       }
    int l = u , h = s , m;
    int lm = -1 , ans = -1;
    if( B > A.size() )
        return -1;
    else if( B == A.size() )
        return u;
    else if( B == 1)
        return s;
    while( l <= h)
    {
        m = ( l + h ) / 2;
        //printf("%d %d %d " , l , m ,h );
        if( l == lm )
            break;
        if( check( A , m , B) )
        {
            ans = m;
            h = m-1;
        }
        else l = m + 1;
        lm = m;
    }
    return ans;
}

