#include <bits/stdc++.h>
using namespace std;
int a[100000];
long long mem[1000][100];
long long nCk(long n, int k) {
  long long r = 1;
  for (long long d = 1; d <= k; ++d) {
    r *= n--;
    r /= d;
  }
  return r;
}
long long p(int k) {
  if (k < 2) {
    return 0;
  } else if (k <= 3) {
    return 1;
  } else {
    long long res = 0;
    for (int i = 0; i <= (k - 2) / 2; i++) {
      long l = (k - 2) - i * 2;
      res += nCk(l + i, i);
    }
    return res;
  }
}
int main() {
  memset(mem, 0, sizeof(mem));
  int n, m;
  cin >> n >> m;
  if (m == 0) {
    cout << p(n + 2) << endl;
    return 0;
  }
  for (int i = 0; i < m; i++) {
    cin >> a[i];
  }
  sort(a, a + m);
  long long result = p(a[0] + 1);
  for (int i = 0; i < m - 1; i++) {
    result *= p(a[i + 1] - a[i]);
    if (result == 0) break;
    result %= 1000000007;
  }
  result *= p(n + 1 - a[m - 1]);
  result %= 1000000007;
  cout << result << endl;
  return 0;
}
