import java.util.*;
import static java.lang.System.*;

class Main {
  public static final int MOD = 1000000007;
  public static final int INF = 1000000000;
  public static void main(String[] args) {
    Scanner sc = new Scanner(in);
    int N = sc.nextInt();
    int M = sc.nextInt();
    boolean a[] = new boolean[N+10];
    for(int i=0; i<M; i++){
      int x = sc.nextInt();
      a[x] = true;
    }
    long dp[] = new long[N+10];
    dp[0] = 1;
    if(a[1] == true) dp[1] = 0;
    else dp[1] = 1;
    for(int i=2; i<=N; i++){
      if(a[i] == true) dp[i] = 0;
      else{
        dp[i] = dp[i-1] + dp[i-2];
        dp[i] %= MOD;
      }
    }
    out.println(dp[N]);
  }

  public static int gcd(int a, int b){
    if(b == 0) return a;
    return gcd(b, a%b);
  }
} import java.util.*; util.* java import static java.lang.System.*; import static java.lang.System.*; import static java.lang.System.*; class Main {
  public static final int MOD = 1000000007;
  public static final int INF = 1000000000;
  public static void main(String[] args) {
    Scanner sc = new Scanner(in);
    int N = sc.nextInt();
    int M = sc.nextInt();
    boolean a[] = new boolean[N+10];
    for(int i=0; i<M; i++){
      int x = sc.nextInt();
      a[x] = true;
    }
    long dp[] = new long[N+10];
    dp[0] = 1;
    if(a[1] == true) dp[1] = 0;
    else dp[1] = 1;
    for(int i=2; i<=N; i++){
      if(a[i] == true) dp[i] = 0;
      else{
        dp[i] = dp[i-1] + dp[i-2];
        dp[i] %= MOD;
      }
    }
    out.println(dp[N]);
  }

  public static int gcd(int a, int b){
    if(b == 0) return a;
    return gcd(b, a%b);
  }
} Main public static final int MOD = 1000000007; MOD 1000000007 public static final int INF = 1000000000; INF 1000000000 public static void main(String[] args) {
    Scanner sc = new Scanner(in);
    int N = sc.nextInt();
    int M = sc.nextInt();
    boolean a[] = new boolean[N+10];
    for(int i=0; i<M; i++){
      int x = sc.nextInt();
      a[x] = true;
    }
    long dp[] = new long[N+10];
    dp[0] = 1;
    if(a[1] == true) dp[1] = 0;
    else dp[1] = 1;
    for(int i=2; i<=N; i++){
      if(a[i] == true) dp[i] = 0;
      else{
        dp[i] = dp[i-1] + dp[i-2];
        dp[i] %= MOD;
      }
    }
    out.println(dp[N]);
  } main {
    Scanner sc = new Scanner(in);
    int N = sc.nextInt();
    int M = sc.nextInt();
    boolean a[] = new boolean[N+10];
    for(int i=0; i<M; i++){
      int x = sc.nextInt();
      a[x] = true;
    }
    long dp[] = new long[N+10];
    dp[0] = 1;
    if(a[1] == true) dp[1] = 0;
    else dp[1] = 1;
    for(int i=2; i<=N; i++){
      if(a[i] == true) dp[i] = 0;
      else{
        dp[i] = dp[i-1] + dp[i-2];
        dp[i] %= MOD;
      }
    }
    out.println(dp[N]);
  } Scanner sc = new Scanner(in); sc new Scanner(in) int N = sc.nextInt(); N sc.nextInt() sc.nextInt sc int M = sc.nextInt(); M sc.nextInt() sc.nextInt sc boolean a[] = new boolean[N+10]; a new boolean[N+10] N+10 N 10 for(int i=0; i<M; i++){
      int x = sc.nextInt();
      a[x] = true;
    } int i=0; int i=0; i 0 i<M i M i++ i++ i {
      int x = sc.nextInt();
      a[x] = true;
    } {
      int x = sc.nextInt();
      a[x] = true;
    } int x = sc.nextInt(); x sc.nextInt() sc.nextInt sc a[x] = true a[x] a x true long dp[] = new long[N+10]; dp new long[N+10] N+10 N 10 dp[0] = 1 dp[0] dp 0 1 if(a[1] == true) dp[1] = 0;
    else dp[1] = 1; a[1] == true a[1] a 1 true dp[1] = 0 dp[1] dp 1 0 dp[1] = 1 dp[1] dp 1 1 for(int i=2; i<=N; i++){
      if(a[i] == true) dp[i] = 0;
      else{
        dp[i] = dp[i-1] + dp[i-2];
        dp[i] %= MOD;
      }
    } int i=2; int i=2; i 2 i<=N i N i++ i++ i {
      if(a[i] == true) dp[i] = 0;
      else{
        dp[i] = dp[i-1] + dp[i-2];
        dp[i] %= MOD;
      }
    } {
      if(a[i] == true) dp[i] = 0;
      else{
        dp[i] = dp[i-1] + dp[i-2];
        dp[i] %= MOD;
      }
    } if(a[i] == true) dp[i] = 0;
      else{
        dp[i] = dp[i-1] + dp[i-2];
        dp[i] %= MOD;
      } a[i] == true a[i] a i true dp[i] = 0 dp[i] dp i 0 {
        dp[i] = dp[i-1] + dp[i-2];
        dp[i] %= MOD;
      } dp[i] = dp[i-1] + dp[i-2] dp[i] dp i dp[i-1] + dp[i-2] dp[i-1] dp i-1 i 1 dp[i-2] dp i-2 i 2 dp[i] %= MOD dp[i] dp i MOD out.println(dp[N]) out.println out dp[N] dp N String[] args args public static int gcd(int a, int b){
    if(b == 0) return a;
    return gcd(b, a%b);
  } gcd {
    if(b == 0) return a;
    return gcd(b, a%b);
  } if(b == 0) return a; b == 0 b 0 return a; a return gcd(b, a%b); gcd(b, a%b) gcd b a%b a b int a a int b b
import java.util.*;
import static java.lang.System.*;

class Main {
  public static final int MOD = 1000000007;
  public static final int INF = 1000000000;
  public static void main(String[] args) {
    Scanner sc = new Scanner(in);
    int N = sc.nextInt();
    int M = sc.nextInt();
    boolean a[] = new boolean[N+10];
    for(int i=0; i<M; i++){
      int x = sc.nextInt();
      a[x] = true;
    }
    long dp[] = new long[N+10];
    dp[0] = 1;
    if(a[1] == true) dp[1] = 0;
    else dp[1] = 1;
    for(int i=2; i<=N; i++){
      if(a[i] == true) dp[i] = 0;
      else{
        dp[i] = dp[i-1] + dp[i-2];
        dp[i] %= MOD;
      }
    }
    out.println(dp[N]);
  }

  public static int gcd(int a, int b){
    if(b == 0) return a;
    return gcd(b, a%b);
  }
}