#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <functional>
#include <cstring>
#include <cmath>

using namespace std;
#define inputInt(a) int a; cin >> a; 
#define inputInt2(a,b) int a; int b; cin >> a >> b; 
#define inputInt3(a,b,c) int a; int b; int c; cin >> a >> b >> c;
#define inputLong(a) long a;cin >> a; 
#define inputIntArray(a,N) int a[N];for(int i=0;i<N;i++){cin >> a[i];}
#define inputIntArray2(a,b,N) int a[N]; int b[N]; for(int i=0;i<N;i++){cin >> a[i] >> b[i];}
#define output(answer) cout << answer << endl;
#define fN(i,N)    for(int i=0; i<N; i++)
#define fSE(i,s,e) for(int i=s; i<=e; i++)

int main()
{
  //input
  inputInt2(N,M);
  inputIntArray(a,M);
  
  //main
  long mod = 1e9+7;
  bool isBroken[N+1] = {false}; //0段目は壊れていない。
  fN(i,M) isBroken[a[i]] = true; //a[i]段目が壊れているかを格納
  
  long memo[N+10]={0};//DPのメモ
  memo[0] = 1;
  
  for(int i=0; i<N; i++){
    if(!isBroken[i+2]) memo[i+2] += (memo[i]%mod + memo[i+1]%mod) % mod;
  }
  
  // 出力
  output(memo[N]);
    
  return 0;
}