#include <iostream>
#include <vector>
using namespace std;
 
vector<vector<long long>> comb_prim(int n, int r) {
  vector<vector<long long>> v(n + 1,vector<long long>(n + 1, 0));
  for (int i = 0; i < v.size(); i++) {
    v[i][0] = 1;
    v[i][i] = 1;
  }
  for (int j = 1; j < v.size(); j++) {
    for (int k = 1; k < j; k++) {
      v[j][k] = (v[j - 1][k - 1] + v[j - 1][k]);
    }
  }
  return v;
}

long long comb(long long x, long long y){
  auto v = comb_prim(x, y);
  return v[x][y];
}
long long count(long long n){
  if(n == 1){
    return 0;
  }
  if(n == 2){
    return 1;
  }
  long long nn = n - 2;
  long long iter = nn /2;
  long long ans = 0;
  for(long long i = 0; i <= iter; i++){
    ans += comb(nn - i, i);
  }
  return ans;
}
int main()
{
  long long n, m;
  cin >> n >> m;
  vector<long>a;
  for(long long i = 0; i < m; i++){
    long long x;
    cin >> x;
    a.push_back(x);
  }
  
  long long ans = count(a[0] + 1);
  for(long long i = 0; i < m-1; i++){
    ans *= count(a[i+1] - a[i]);
  }
  
  ans *= count(n - a[m-1] + 1);
  cout << ans % 1'000'000'007;
  return 0;
}