#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n;
long long m;
long long p[N];
long long dp[N];
long long maxd;
bool check(long long mid) {
  if (mid >= maxd - 1) return true;
  if (mid + mid < maxd - 1) return false;
  for (int start = 0; start < 2; start++) {
    if (start == 0) {
      dp[0] = 0;
    } else {
      dp[0] = p[0] + mid;
      dp[1] = max(p[0] + mid, p[1]);
    }
    for (int i = start + 1; i < n; i++) {
      dp[i] = dp[i - 1];
      if (dp[i - 1] >= p[i] - 1) dp[i] = max(dp[i], p[i] + mid);
      if (dp[i - 1] >= p[i] - mid - 1) dp[i] = max(dp[i], p[i]);
      if (i >= 2 && dp[i - 2] >= p[i] - mid - 1)
        dp[i] = max(dp[i], p[i - 1] + mid);
    }
    if (dp[n - 1] >= p[start] + m - mid - 1) return true;
  }
  return false;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> m;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> p[i];
    p[i]--;
  }
  if (n == 1) {
    cout << m - 1 << endl;
    return 0;
  } else {
    int beg = 0;
    maxd = p[0] + m - p[n - 1];
    for (int i = 1; i < n; i++) {
      if ((p[i] - p[i - 1]) > maxd) {
        maxd = p[i] - p[i - 1];
        beg = i;
      }
    }
    rotate(p, p + beg, p + n);
    for (int i = 1; i < n; i++) {
      p[i] -= p[0];
      if (p[i] < 0) p[i] += m;
    }
    p[0] = 0;
    long long lf = 0, rg = maxd - 1;
    while (lf < rg) {
      long long mid = (lf + rg) >> 1;
      if (check(mid))
        rg = mid;
      else
        lf = mid + 1;
    }
    cout << lf << endl;
    return 0;
  }
}
