回溯法暴力枚举
#include<iostream>
using namespace std;

const int maxn=1000000;
int v[maxn],a[maxn],w[maxn];
int m,n;
int counter=0;
int result=0;
int max(int g,int h){
    return g>h?g:h;
}
int min(int g,int h){
    return g<h?g:h;
}
int tempmax(int*t,int xx,int yy){
int maxx=0;
for(int p=xx;p<yy;p++)maxx+=t[p];
return maxx;
}
int tempmin(int*t,int xx,int yy){
int maxx=100000;
for(int p=xx;p<yy;p++)if(maxx>t[p])maxx=t[p];
return maxx;
}
void minre(int* b,int cur,int local){
    
    if(cur==m){v[counter++]=result; result=0;return;}
else for(int j=0;j<n;j++){
    if(local<j){
        if(cur==m-1){result=max(result,tempmax(b,local,n));minre(b,cur+1,j);}
        else{
         result=max(result,tempmax(b,local,j));
         minre(b,cur+1,j);
        }
    }
}
}
int main(){
scanf("%d%d",&m,&n);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
minre(a,0,0);
int re=tempmin(v,0,counter);
printf("%d\n",re);
    return 0;
}