#include <bits/stdc++.h>
using namespace std;
template <class T1, class T2>
void pr(const pair<T1, T2>& x);
template <class T, size_t SZ>
void pr(const array<T, SZ>& x);
template <class T>
void pr(const vector<T>& x);
template <class T>
void pr(const set<T>& x);
template <class T1, class T2>
void pr(const map<T1, T2>& x);
template <class T>
void pr(const T& x) {
  cout << x;
}
template <class Arg, class... Args>
void pr(const Arg& first, const Args&... rest) {
  pr(first);
  pr(rest...);
}
template <class T1, class T2>
void pr(const pair<T1, T2>& x) {
  pr("{", x.first, ", ", x.second, "}");
}
template <class T>
void prContain(const T& x) {
  pr("{");
  bool fst = 1;
  for (auto& a : x) pr(!fst ? ", " : "", a), fst = 0;
  pr("}");
}
template <class T, size_t SZ>
void pr(const array<T, SZ>& x) {
  prContain(x);
}
template <class T>
void pr(const vector<T>& x) {
  prContain(x);
}
template <class T>
void pr(const set<T>& x) {
  prContain(x);
}
template <class T1, class T2>
void pr(const map<T1, T2>& x) {
  prContain(x);
}
void ps() { pr("\n"); }
template <class Arg, class... Args>
void ps(const Arg& first, const Args&... rest) {
  pr(first, " ");
  ps(rest...);
}
template <typename T>
int remin(T& a, const T& b) {
  if (b < a) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
int remax(T& a, const T& b) {
  if (b > a) {
    a = b;
    return true;
  }
  return false;
}
int N, K;
vector<int> ind[100005];
int main(int argc, const char** argv) {
  scanf("%d%d", &N, &K);
  vector<int> x(K);
  for (int i = 0; i < K; ++i) {
    scanf("%d", &x[i]);
    ind[x[i]].push_back(i);
  }
  int total = 0;
  for (int k = 1; k < N; ++k) {
    if (ind[k].size() == 0)
      total += 3;
    else {
      if (ind[k + 1].size() == 0)
        total += 2;
      else {
        if (ind[k + 1].back() < ind[k].front()) {
          total++;
        } else if (ind[k].back() < ind[k + 1].front()) {
          total++;
        }
      }
    }
  }
  if (ind[N].size() == 0) total++;
  printf("%d\n", total);
  return 0;
}
