import java.util.*;

class Main{
  public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    int mod=1000_000_007;
    int n=sc.nextInt();
    int[] a=new int[n+1];
    int m=sc.nextInt();
    Deque<Integer> dq=new ArrayDeque<>();
    for(int i=0;i<m;i++){
      dq.addLast(sc.nextInt());
    }
    dq.addLast(n*2);
//    System.err.println(dq);
    a[0]=1;
    if(dq.peekFirst()==1){
      a[1]=0;
      dq.pollFirst();
    }else{
      a[1]=1;
    }
    for(int i=2;i<=n;i++){
      if(i==dq.peekFirst()){
        a[i]=0;
        dq.pollFirst();
      }else{
        a[i]=(a[i-1]+a[i-2])%mod;
      }
    }
//    System.err.println(Arrays.toString(a));
    System.out.println(a[n]);
  }
} import java.util.*; util.* java class Main{
  public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    int mod=1000_000_007;
    int n=sc.nextInt();
    int[] a=new int[n+1];
    int m=sc.nextInt();
    Deque<Integer> dq=new ArrayDeque<>();
    for(int i=0;i<m;i++){
      dq.addLast(sc.nextInt());
    }
    dq.addLast(n*2);
//    System.err.println(dq);
    a[0]=1;
    if(dq.peekFirst()==1){
      a[1]=0;
      dq.pollFirst();
    }else{
      a[1]=1;
    }
    for(int i=2;i<=n;i++){
      if(i==dq.peekFirst()){
        a[i]=0;
        dq.pollFirst();
      }else{
        a[i]=(a[i-1]+a[i-2])%mod;
      }
    }
//    System.err.println(Arrays.toString(a));
    System.out.println(a[n]);
  }
} Main public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    int mod=1000_000_007;
    int n=sc.nextInt();
    int[] a=new int[n+1];
    int m=sc.nextInt();
    Deque<Integer> dq=new ArrayDeque<>();
    for(int i=0;i<m;i++){
      dq.addLast(sc.nextInt());
    }
    dq.addLast(n*2);
//    System.err.println(dq);
    a[0]=1;
    if(dq.peekFirst()==1){
      a[1]=0;
      dq.pollFirst();
    }else{
      a[1]=1;
    }
    for(int i=2;i<=n;i++){
      if(i==dq.peekFirst()){
        a[i]=0;
        dq.pollFirst();
      }else{
        a[i]=(a[i-1]+a[i-2])%mod;
      }
    }
//    System.err.println(Arrays.toString(a));
    System.out.println(a[n]);
  } main {
    Scanner sc=new Scanner(System.in);
    int mod=1000_000_007;
    int n=sc.nextInt();
    int[] a=new int[n+1];
    int m=sc.nextInt();
    Deque<Integer> dq=new ArrayDeque<>();
    for(int i=0;i<m;i++){
      dq.addLast(sc.nextInt());
    }
    dq.addLast(n*2);
//    System.err.println(dq);
    a[0]=1;
    if(dq.peekFirst()==1){
      a[1]=0;
      dq.pollFirst();
    }else{
      a[1]=1;
    }
    for(int i=2;i<=n;i++){
      if(i==dq.peekFirst()){
        a[i]=0;
        dq.pollFirst();
      }else{
        a[i]=(a[i-1]+a[i-2])%mod;
      }
    }
//    System.err.println(Arrays.toString(a));
    System.out.println(a[n]);
  } Scanner sc=new Scanner(System.in); sc new Scanner(System.in) int mod=1000_000_007; mod 1000_000_007 int n=sc.nextInt(); n sc.nextInt() sc.nextInt sc int[] a=new int[n+1]; a new int[n+1] n+1 n 1 int m=sc.nextInt(); m sc.nextInt() sc.nextInt sc Deque<Integer> dq=new ArrayDeque<>(); dq new ArrayDeque<>() for(int i=0;i<m;i++){
      dq.addLast(sc.nextInt());
    } int i=0; int i=0; i 0 i<m i m i++ i++ i {
      dq.addLast(sc.nextInt());
    } {
      dq.addLast(sc.nextInt());
    } dq.addLast(sc.nextInt()) dq.addLast dq sc.nextInt() sc.nextInt sc dq.addLast(n*2) dq.addLast dq n*2 n 2 a[0]=1 a[0] a 0 1 if(dq.peekFirst()==1){
      a[1]=0;
      dq.pollFirst();
    }else{
      a[1]=1;
    } dq.peekFirst()==1 dq.peekFirst() dq.peekFirst dq 1 {
      a[1]=0;
      dq.pollFirst();
    } a[1]=0 a[1] a 1 0 dq.pollFirst() dq.pollFirst dq {
      a[1]=1;
    } a[1]=1 a[1] a 1 1 for(int i=2;i<=n;i++){
      if(i==dq.peekFirst()){
        a[i]=0;
        dq.pollFirst();
      }else{
        a[i]=(a[i-1]+a[i-2])%mod;
      }
    } int i=2; int i=2; i 2 i<=n i n i++ i++ i {
      if(i==dq.peekFirst()){
        a[i]=0;
        dq.pollFirst();
      }else{
        a[i]=(a[i-1]+a[i-2])%mod;
      }
    } {
      if(i==dq.peekFirst()){
        a[i]=0;
        dq.pollFirst();
      }else{
        a[i]=(a[i-1]+a[i-2])%mod;
      }
    } if(i==dq.peekFirst()){
        a[i]=0;
        dq.pollFirst();
      }else{
        a[i]=(a[i-1]+a[i-2])%mod;
      } i==dq.peekFirst() i dq.peekFirst() dq.peekFirst dq {
        a[i]=0;
        dq.pollFirst();
      } a[i]=0 a[i] a i 0 dq.pollFirst() dq.pollFirst dq {
        a[i]=(a[i-1]+a[i-2])%mod;
      } a[i]=(a[i-1]+a[i-2])%mod a[i] a i (a[i-1]+a[i-2])%mod (a[i-1]+a[i-2]) a[i-1] a i-1 i 1 a[i-2] a i-2 i 2 mod System.out.println(a[n]) System.out.println System.out System System.out a[n] a n String[] args args
import java.util.*;

class Main{
  public static void main(String[] args){
    Scanner sc=new Scanner(System.in);
    int mod=1000_000_007;
    int n=sc.nextInt();
    int[] a=new int[n+1];
    int m=sc.nextInt();
    Deque<Integer> dq=new ArrayDeque<>();
    for(int i=0;i<m;i++){
      dq.addLast(sc.nextInt());
    }
    dq.addLast(n*2);
//    System.err.println(dq);
    a[0]=1;
    if(dq.peekFirst()==1){
      a[1]=0;
      dq.pollFirst();
    }else{
      a[1]=1;
    }
    for(int i=2;i<=n;i++){
      if(i==dq.peekFirst()){
        a[i]=0;
        dq.pollFirst();
      }else{
        a[i]=(a[i-1]+a[i-2])%mod;
      }
    }
//    System.err.println(Arrays.toString(a));
    System.out.println(a[n]);
  }
}