#include<iostream>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<stdio.h>
#include<string>
using namespace std;
const int maxn = 1000 + 10;
const int INF = 0x3f3f3f3f;
int a[maxn];
int n;
int d[maxn][maxn];
void dp2() {
for (int i = 0; i <= n + 1;i++)d[i][i] = 0;
for (int i = 0; i <= n + 1; i++) {
for (int j = 0; j < i; j++) {
}
}
}
int dp(int i, int j) {
if (d[i][j] != INF)return d[i][j];
if (i == j-1)return 0;
for (int k = i+1; k < j; k++) {
d[i][j] = min(d[i][j], dp(i, k) + dp(k, j) + a[j] - a[i]);
}
return d[i][j];
}
int main()
{
int len;
while (cin >> len && len) {
memset(d, 0x3f, sizeof(d));
cin >> n;
a[0] = 0;
a[n + 1]=len;
for (int i = 1; i <= n; i++)cin >> a[i];
cout << "The minimum cutting is "<<dp(0, n + 1)<<"." << endl;
}
return 0;
}