#include <stdio.h>

int book[100];

class list{
public:
	int listwide,stert,end;
	
	//本棚の大きさの更新
	void totalwide(){
		int i,j;
		listwide = 0;
		for(i = stert; i <= end; i++){
			listwide += book[i];
		}
	}
	void print(){
		printf("w:%d s:%d e:%d\n",listwide,stert,end);
	}
};

list ct[20];
int n,m;

int main()
{
	int i,j,maxNO,max;
	int totalmin;

	scanf("%d%d",&m,&n);
	while(m != 0 && n != 0){
		//初期化
		for(i = 0; i < m; i++){
			ct[i].stert = i;
			ct[i].end = i;
		}
		for(; i < n; i++){
			ct[m-1].end++;
		}
		totalmin = 100000;

		//入力
		for(i = 0; i < n; i++){
			scanf("%d",&book[i]);
		}
		
		//処理開始
		//一番幅の大きい棚から1冊、上の棚へ移動する
		//同じ幅の棚が複数ある場合、一番下の棚からとる
		//最大の棚が一番上の棚になったら終了
		for(i = 0; i < m; i++){
			ct[i].totalwide();
		}
		while(1){
			//一番大きい棚のナンバー
			max = 0;
			for(i = 0; i < m; i++){
				if(max < ct[i].listwide){
					max = ct[i].listwide;
					maxNO = i;
				}
			}
			if(max < totalmin){
				totalmin = max;
			}
			/*printf("最大NO:%d サイズ:%d\n",maxNO,max);
			for(i = 0; i < m; i++){
			printf("NO:%d サイズ:%d\n",i,ct[i].listwide);
			}*/
			//一番上なら終了
			if(maxNO == 0){
				break;
			}
			ct[maxNO].stert++;
			ct[maxNO-1].end++;
			ct[maxNO].totalwide();
			ct[maxNO-1].totalwide();
		}
		printf("%d\n",totalmin);

		scanf("%d%d",&m,&n);
	}

	return 0;
}