#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;
}