//2?????¢?´¢????????£????§£????????????????????????????????§??????
#include<cstdio>
#include<iostream>

using namespace std;

int gcd(int m, int n)
{
	if ((0 == m) || (0 == n))
		return 0;
	while (m != n)
	{
		if (m > n) m = m - n;
		else         n = n - m;
	}
	return m;
}




int main(void) {

	
	int floor, n, book[101] = {0};
	cin >> floor >> n;

	if (floor == 0)return 0;

	for (int i = 0; i < n; i++) {
		cin >> book[i];
	}

	//?????§??¬?´???°????±???????
	int m=book[0];
	int w_avr = book[0];
	for (int i = 1; i < n; i++) {
		m = gcd(m, book[i]);
		w_avr += book[i];
	}
	//?????????????????§?????¬??????????????????????????°??§?????£?????°??????????????¬????????§?????????
	int ans= w_avr/floor;

	for (int i = 0; i < n; i++) {
		if (ans < book[i]) {
			ans = book[i];
		}
	}
	while (ans%m != 0) {
		ans++;
	}
	while (1) {
		int count = floor;
		int length = ans;
		int i = 0;
		while (count != 0&&i<n) {
			if (length >= book[i]) {
				length -= book[i];
				i++;
			}
			else {
				length = ans;
				count = count - 1;
			}
		}
		if (count != 0) {
			break;
		}
		ans += m;
	}
	cout << ans<< endl;
}