#include <iostream>
#include <algorithm>
#define int long long
using namespace std;

int n, l;
int a[200000];	//a[i] = 高橋家から反時計回りに歩くとき、i(>=0)番目に遭遇する木までの移動距離
int b[200000];	//b[i] = 高橋家から時計回りに歩くとき、i(>=0)番目に遭遇する木までの移動距離
int ra[200001];	//ra[i] = a[0]+…+a[i-1], ただしra[0] = 0
int rb[200001];	//rb[i] = b[0]+…+b[i-1], ただしrb[0] = 0

int solve(int ra[], int rb[], int a[], int b[]) {
	int i;
	int ret = 0;
	
	//最初はi番目の木に遭遇するまで、時計回りに移動する
	for (i = 0; i < n; i++) {
		int m = n - i;
		int cost;
		if (m % 2 == 1) {	//a->b->a->…->a
			cost = 
			2 * (ra[i + (m + 1) / 2] - ra[i]) + 
			2 * rb[m / 2] - 
			a[i + m / 2];
		}
		else {
			cost = 
			2 * (ra[i + m / 2] - ra[i]) +
			2 * (rb[m / 2]) - 
			b[m / 2 - 1];
		}
		ret = max(ret, cost);
	}
	return ret;
}

signed main() {
	int i;
	
	cin >> l >> n;
	for (i = 0; i < n; i++) {
		cin >> a[i];
		b[n - 1 - i] = l - a[i];
	}

	ra[0] = 0;
	rb[0] = 0;
	for (i = 1; i <= n; i++) {
		ra[i] = ra[i - 1] + a[i - 1];
		rb[i] = rb[i - 1] + b[i - 1];
	}
	
	int ans1 = solve(ra, rb, a, b);	//最初、反時計回りに移動する
	int ans2 = solve(rb, ra, b, a);	//最初、時計回りに移動する(この場合は円を裏返して解けばOK）
	cout << max(ans1, ans2) << endl;
	return 0;
}