#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int m,n;
int MinTime(int p,int q,vector<int>& v ,int *a);

int main(){
    //m节 n task
    cin>>m;
    cin>>n;
    int a[n+1];
    for(int i=1;i<=n;++i){
        cin>>a[i];
    }
    vector<int> v(m+1,0);
    //第1个节点,累计分配了0个任务;
    int res=MinTime(1,0,v,a);
    cout<<res;
    return 0;
}

// p表示分配到了第几个节点 q表示已经分配了多少任务。
int MinTime(int p,int q,vector<int>& v ,int *a){
    if(p==m+1&& q==n){
        int res=INT_MIN;
        int cur=0;
        for(int i=1;i<v.size();++i){
            //节点对应的任务书
            //cout<<i<<":"<<v[i]<<endl;
            int temp=0;
            for(int j=1;j<=v[i];j++){
                temp+=a[j+cur];
            }
            res=max(temp,res);
            cur+=v[i];
        }
        return res;
    }else if(p==m+1 && q!=n){
        return INT_MAX;
    }

    int res= INT_MAX;
    //n-q 剩余的task数
    for(int i=1;i<=n-q-(m-p);i++){ 
        v[p]=i;
        res=min(res,MinTime(p+1,q+i,v,a));
        v[p]=0;
    }
    return res;
}