#include <bits/stdc++.h>
using namespace std;
vector<bool> stairs_table(10100);
vector<bool> dp_there(10100);
vector<long long int> dp_map(10100);
long long int dp(int n) {
  if (n == 1) return 1;
  if ((n == 2) && (stairs_table.at(1) == true)) return 2;
  if ((n == 2) && (stairs_table.at(1) != false)) return 1;
  if (dp_there.at(n)) return dp_map.at(n);
  if ((stairs_table.at(n - 1) == false) && (stairs_table.at(n - 2) == false)) {
    dp_map.at(n) = 0;
  }
  if ((stairs_table.at(n - 1) == false) && (stairs_table.at(n - 2) == true)) {
    dp_map.at(n) = dp(n - 2);
  }
  if ((stairs_table.at(n - 1) == true) && (stairs_table.at(n - 2) == false)) {
    dp_map.at(n) = dp(n - 1);
  }
  if ((stairs_table.at(n - 1) == true) && (stairs_table.at(n - 2) == true))
    dp_map.at(n) = dp(n - 1) + dp(n - 2);
  dp_there.at(n) = true;
  return dp_map.at(n);
}
int main() {
  for (int i = 0; i < 10100; i++) {
    stairs_table.at(i) = true;
    dp_there.at(i) = false;
  }
  int n, m;
  cin >> n >> m;
  vector<int> a(m);
  for (int i = 0; i < m; i++) {
    cin >> a.at(i);
    stairs_table.at(a.at(i)) = false;
  }
  cout << dp(n) % 1000000007 << endl;
}
