#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int INF = 2147483647;
const long long INFLL = 9223372036854775807LL;
const int MAX_N = 1e5 + 5;
const double PI = acos(-1);
struct mint {
  long long value;
  mint(long long value = 0) : value((value % MOD + MOD) % MOD) {}
  mint pow(long long t) const {
    if (!t) return 1;
    mint a = pow(t >> 1);
    a *= a;
    if (t & 1) a *= *this;
    return a;
  }
  mint pow(mint m) const { return pow(m.value); }
  mint inv() const {
    long long a = value, b = MOD, u = 1, v = 0;
    while (b) {
      long long t = a / b;
      a -= t * b;
      swap(a, b);
      u -= t * v;
      swap(u, v);
    }
    u %= MOD;
    return u;
  }
  mint &operator+=(const mint a) {
    if ((value += a.value) >= MOD) value -= MOD;
    return *this;
  }
  mint &operator-=(const mint a) {
    if ((value += MOD - a.value) >= MOD) value -= MOD;
    return *this;
  }
  mint &operator*=(const mint a) {
    (value *= a.value) %= MOD;
    return *this;
  }
  mint &operator/=(const mint a) { return (*this) *= a.inv(); }
  mint operator+(const mint a) const {
    mint res(*this);
    return res += a;
  }
  mint operator-(const mint a) const {
    mint res(*this);
    return res -= a;
  }
  mint operator*(const mint a) const {
    mint res(*this);
    return res *= a;
  }
  mint operator/(const mint a) const {
    mint res(*this);
    return res /= a;
  }
};
mint dp[100020];
int main() {
  int n, m;
  cin >> n >> m;
  vector<int> a(m);
  for (int i = 0; i < (int)(m); i++) cin >> a[i];
  dp[0] = 1;
  dp[1] = 1;
  for (int i = 0; i < (int)(100000); i++) {
    dp[i + 2] += dp[i] + dp[i + 1];
  }
  mint ans(1);
  ans *= dp[a.front() - 1];
  for (int i = 0; i < (int)(m - 1); i++) {
    if (a[i + 1] - 1 < a[i] + 1) {
      ans *= 0;
      break;
    }
    ans *= dp[a[i + 1] - a[i] - 2];
  }
  ans *= dp[n - a.back() - 1];
  cout << ans.value << endl;
}
