Problem: Owl Sonya decided to become a partymaker. To train for this role she gather all her owl friends in the country house. There are m chairs located in a circle and consequently numbered with integers from 1 to m. Thus, chairs i and i + 1 are neighbouring for all i from 1 to m - 1. Chairs 1 and m are also neighbouring. Some chairs are occupied by her friends. There are n friends in total. No two friends occupy the same chair. Rules are the following:

  1. Each participant removes from the game the chair he is currently sitting on. 
  2. Each of the participants choose a direction that she will follow: clockwise (indices increase, from m goes to 1) and counter-clockwise (indices decrease, from 1 goes to m). This direction may coincide or be different for any pair of owls. 
  3. Each turn all guests move one step in the chosen directions. If some guest move to the position with a chair there, he removes this chair from the game. 
  4. Game ends if there are no more chairs left in the game. 



Owls are very busy and want to get rid of the game as soon as possible. They cooperate to pick the direction. Your goal is to find the minimum number o moves required to finish the game.

Input

The first line of the input contains a single integer m (1 ≤ m ≤ 109) — the length of the circle.

The second line contains a single integer n (1 ≤ n ≤ 100 000) — the number of friends.

Last line contains an increasing sequence of n integers ai (1 ≤ ai ≤ m) — initial positions of all owls.

Output

Print the minimum number of move required to finish the game. Note, that 0 also may be an answer.

Examples

Input

6
3
1 3 5


Output

1


Input

6
2
1 6


Output

2


Input

406
6
1 2 3 204 205 206


Output

100

Note

In the first sample, it's possible if all owls will move clockwise, i.e. in the direction of increasing indices.

In the sample, first owl has to move clockwise, while the second — counterclockwise.

In the third sample, the first and the fourth owls should move counterclockwise, while the third and the sixth — clockwise. The second and the firth may move in any direction.

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
template <class TAT>
inline void read(TAT &a) {
  static char cc;
  static bool f;
  while ((cc = getchar()) != '-' && (cc < '0' || cc > '9'))
    ;
  if (cc == '-')
    f = 1, a = 0;
  else
    f = 0, a = cc - '0';
  while ((cc = getchar()) >= '0' && cc <= '9') a = a * 10 + cc - '0';
  if (f) a = -a;
}
template <class TAT>
inline void write(TAT a) {
  static char cc[27];
  static int ct;
  if (a == 0) {
    putchar('0');
    return;
  }
  if (a < 0) {
    a = -a;
    putchar('-');
  }
  ct = 0;
  while (a) cc[++ct] = a % 10 + '0', a /= 10;
  while (ct) putchar(cc[ct--]);
}
template <class TAT>
inline void Ckmin(TAT &a, const TAT &b) {
  if (a > b) a = b;
}
template <class TAT>
inline void Ckmax(TAT &a, const TAT &b) {
  if (a < b) a = b;
}
void begin() {
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
}
void end() {
  fclose(stdin);
  fclose(stdout);
}
const int maxn = 1e5 + 115;
int n, m;
int A[maxn], B[maxn];
int f[maxn][2];
void Init() {
  read(m);
  read(n);
  for (int i = 1; i <= n; ++i) {
    read(B[i]);
  }
  sort(B + 1, B + 1 + n);
}
bool TRY(int L) {
  int m0, m1, Last, nL;
  Last = -L;
  while (1) {
    memset(f, 0x3f, sizeof(f));
    f[1][0] = f[1][1] = Last;
    for (int i = 1; i < n; ++i) {
      m0 = A[i + 1] - A[i] + f[i][0] - (f[i][0] <= 0);
      m1 = A[i + 1] - A[i] + f[i][1] - (f[i][1] <= 0);
      if (m0 < 0) ++m0;
      if (m1 < 0) ++m1;
      if (m0 <= L) {
        Ckmin(f[i + 1][0], min(0, m0));
        if (m0 <= 0)
          Ckmin(f[i + 1][1], min(m0, -L));
        else
          Ckmin(f[i + 1][1], m0);
      }
      if (m1 <= L) {
        Ckmin(f[i + 1][0], min(0, min(m1, -(A[i] + L - A[i + 1]))));
        if (m1 <= 0)
          Ckmin(f[i + 1][1], min(m1, -L));
        else
          Ckmin(f[i + 1][1], m1);
      }
    }
    if (min(f[n][1], f[n][0]) > 1e9) return 0;
    if (max(-f[n][1], -f[n][0]) + max(0, Last) >= A[1] - 1 + m - A[n])
      return 1;
    else {
      nL = A[1] - 1 + m - A[n] + min(f[n][1], f[n][0]);
      if (min(f[n][1], f[n][0]) > 0) ++nL;
      if (nL == Last)
        return 0;
      else
        Last = nL;
    }
  }
  return 0;
}
bool Check(int L) {
  memcpy(A, B, sizeof(A));
  if (TRY(L)) return 1;
  int det;
  det = m - B[n] + 1;
  A[1] = 1;
  for (int i = 2; i <= n; ++i) A[i] = B[i - 1] + det;
  if (TRY(L)) return 1;
  memcpy(A, B, sizeof(A));
  for (int i = 1; i <= n; ++i) A[i] = m - A[i] + 1;
  reverse(A + 1, A + 1 + n);
  if (TRY(L)) return 1;
  return 0;
}
void Solve() {
  if (n == 1) {
    write(m - 1);
    return;
  }
  int l, r, mid;
  l = 0, r = m - 1;
  while (l != r) {
    mid = (l + r) / 2;
    if (Check(mid)) {
      r = mid;
    } else {
      l = mid + 1;
    }
  }
  write(l);
  putchar('\n');
}
int main() {
  Init();
  Solve();
  return 0;
}