#include <bits/stdc++.h>
using namespace std;
template <typename T>
T gcd(T a, T b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
template <typename T>
T lcm(T a, T b) {
  return (a * b) / gcd(b % a, a);
}
static constexpr long long d = 1000000007;
long long stairs(int cur, int n, const vector<int>& a,
                 vector<long long>& memo) {
  if (cur == n) return 1;
  if (cur > n || binary_search(a.begin(), a.end(), cur)) return 0;
  if (memo[cur] != -1) return memo[cur];
  long long ans = 0;
  ans += stairs(cur + 1, n, a, memo) % d;
  ans += stairs(cur + 2, n, a, memo) % d;
  memo[cur] = ans % d;
  return ans;
}
long long stairs(int cur, int n, const vector<int>& a) {
  vector<long long> memo(n, -1);
  return stairs(cur, n, a, memo);
}
int main() {
  cin.tie(nullptr);
  ios::sync_with_stdio(false);
  cout << setprecision(20);
  int n, m;
  cin >> n >> m;
  vector<int> a(m);
  for (int i = 0; i < (int)(m); i++) {
    cin >> a[i];
  }
  cout << stairs(0, n, a) << endl;
  return 0;
}
