#include <iostream>
using namespace std;

long long int a[150];
int n, m;

bool i_can(int wid, int m){
	int k = 1, sum = 0;
	for(int i = 0;i<=n;i++){
		sum += a[i];
		if(sum > wid){
			sum = a[i];
			k++;
		}
		if (m < k) return false;
	}
	return true;
}

int nibun(int s, int e, int m){
	if(!(i_can((s+e)/2,m))){
		return nibun((s + e) / 2 + 1, e, m);
	}
	else if (s == e) return s;
	else return nibun(s, (s + e) / 2, m);
}

int main(){
	while(cin >> m >> n){
		if (!n && !m) break;
		a[0] = 0;
		for(int i = 1;i<=n;i++){
			cin >> a[i];
		}
		cout << nibun(0, 1500000, m) << endl;
	}
	return 0;
}