/*
テヲツ鳴ーテ」ツ?療」ツ?湘、ツスツ愿」ツ?」テ」ツ?淌」ツつ「テ」ツつォテ」ツつヲテ」ツδウテ」ツδ暗」ツ?古、ツスツソテ」ツ?暗」ツ?セテ」ツ?崚」ツつ禿」ツ?ァテ」ツ?療」ツ?淌」ツ??

テ、ツコツ古・ツ按?ヲツ篠「テァツエツ「テ」ツ??
*/

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

int m,n;
vector<int>v;

bool C(int x){

  int cnt=0,sum=0,i=0;
  while(i<n && cnt<m){
    if(sum+v[i]<=x)sum+=v[i],i++;
    else sum=0,cnt++;
  }
  return i==n && m>cnt;
}

int main(void){

  while(cin >> m >> n,m|n){
    v.clear();

    int l=0,r=100000000,a;
    for(int i=0;i<n;i++){
      cin >> a;
      v.push_back(a);
    }
    
    while(r-l>1){
      int mid=(l+r)/2;
      if(C(mid))r=mid;
      else l=mid;
    }
    cout << r << endl;
  }

  return 0;
}