#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const int N = 1e5 + 10;
int n, m, a[N];
int main() {
  ios::sync_with_stdio(0), cin.tie(0), cout.setf(ios::fixed), cout.precision(9);
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) cin >> a[i];
  a[n + 1] = m;
  vector<int> pfs(n + 2, 0), pos(n + 2, 0);
  for (int i = 1; i <= n + 1; ++i) {
    if (i & 1) {
      if (i - 2 >= 0) pfs[i] = pfs[i - 2];
      pfs[i] += a[i] - a[i - 1];
    } else {
      pfs[i] = pfs[i - 1];
    }
  }
  if (n & 1) {
    for (int i = n; i >= 0; --i) {
      if ((n - i) & 1) {
        pos[i] = pos[i + 1];
      } else {
        if (i + 2 <= n) pos[i] = pos[i + 2];
        pos[i] += a[i + 1] - a[i];
      }
    }
  } else {
    for (int i = n; i >= 0; --i) {
      if ((n - i) & 1) {
        if (i + 2 <= n) pos[i] = pos[i + 2];
        pos[i] += a[i + 1] - a[i];
      } else {
        pos[i] = pos[i + 1];
      }
    }
  }
  int ans = pfs[n + 1];
  for (int i = 0; i <= n + 1; ++i) {
    if (a[i] - 1 > 0 and a[i] - 1 != a[i - 1]) {
      int now_ans;
      if (i & 1) {
        now_ans = pfs[i] - 1 + pos[i];
      } else {
        now_ans = pfs[i - 1] + 1 + pos[i];
      }
      ans = max(ans, now_ans);
    }
    if (a[i] + 1 < m and a[i] + 1 != a[i + 1]) {
      int now_ans;
      if (i & 1) {
        now_ans = pfs[i] + a[i + 1] - a[i] - 1 + pos[i + 1];
      } else {
        now_ans = pfs[i] + 1 + pos[i + 1];
      }
      ans = max(ans, now_ans);
    }
  }
  cout << ans << '\n';
}
