import java.util.*;
import java.lang.*;
import java.io.*;

public class Main{
public static void main (String[] args){
	Scanner sc = new Scanner(System.in);
	int n = Integer.parseInt(sc.next());//段数
	int m = Integer.parseInt(sc.next());//破損数
	int[] a = new int[n+1];//破損配列all(01)
	long[] s = new long[n+1];//到達パターン
	boolean flag = true;//到達可能性
	
	for(int i = 0; i<n+1; i++){
		a[i] = 1;
	}
	if(m!=0){
		int b = 0;
		for(int i = 0; i<m; i++){
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		}
	}
	
	if(flag){
		s[0] = 1;
		s[1] = 1;
		if(n!=1){
			for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			}
		}
	System.out.println(s[n]);
	}
	
	}
} import java.util.*; util.* java import java.lang.*; lang.* java import java.io.*; io.* java public class Main{
public static void main (String[] args){
	Scanner sc = new Scanner(System.in);
	int n = Integer.parseInt(sc.next());//段数
	int m = Integer.parseInt(sc.next());//破損数
	int[] a = new int[n+1];//破損配列all(01)
	long[] s = new long[n+1];//到達パターン
	boolean flag = true;//到達可能性
	
	for(int i = 0; i<n+1; i++){
		a[i] = 1;
	}
	if(m!=0){
		int b = 0;
		for(int i = 0; i<m; i++){
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		}
	}
	
	if(flag){
		s[0] = 1;
		s[1] = 1;
		if(n!=1){
			for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			}
		}
	System.out.println(s[n]);
	}
	
	}
} Main public static void main (String[] args){
	Scanner sc = new Scanner(System.in);
	int n = Integer.parseInt(sc.next());//段数
	int m = Integer.parseInt(sc.next());//破損数
	int[] a = new int[n+1];//破損配列all(01)
	long[] s = new long[n+1];//到達パターン
	boolean flag = true;//到達可能性
	
	for(int i = 0; i<n+1; i++){
		a[i] = 1;
	}
	if(m!=0){
		int b = 0;
		for(int i = 0; i<m; i++){
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		}
	}
	
	if(flag){
		s[0] = 1;
		s[1] = 1;
		if(n!=1){
			for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			}
		}
	System.out.println(s[n]);
	}
	
	} main {
	Scanner sc = new Scanner(System.in);
	int n = Integer.parseInt(sc.next());//段数
	int m = Integer.parseInt(sc.next());//破損数
	int[] a = new int[n+1];//破損配列all(01)
	long[] s = new long[n+1];//到達パターン
	boolean flag = true;//到達可能性
	
	for(int i = 0; i<n+1; i++){
		a[i] = 1;
	}
	if(m!=0){
		int b = 0;
		for(int i = 0; i<m; i++){
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		}
	}
	
	if(flag){
		s[0] = 1;
		s[1] = 1;
		if(n!=1){
			for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			}
		}
	System.out.println(s[n]);
	}
	
	} Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int n = Integer.parseInt(sc.next()); n Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc int m = Integer.parseInt(sc.next()); m Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc int[] a = new int[n+1]; a new int[n+1] n+1 n 1 long[] s = new long[n+1]; s new long[n+1] n+1 n 1 boolean flag = true; flag true for(int i = 0; i<n+1; i++){
		a[i] = 1;
	} int i = 0; int i = 0; i 0 i<n+1 i n+1 n 1 i++ i++ i {
		a[i] = 1;
	} {
		a[i] = 1;
	} a[i] = 1 a[i] a i 1 if(m!=0){
		int b = 0;
		for(int i = 0; i<m; i++){
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		}
	} m!=0 m 0 {
		int b = 0;
		for(int i = 0; i<m; i++){
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		}
	} int b = 0; b 0 for(int i = 0; i<m; i++){
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		} int i = 0; int i = 0; i 0 i<m i m i++ i++ i {
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		} {
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		} b = Integer.parseInt(sc.next()) b Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			} a[b-1] != 0 a[b-1] a b-1 b 1 0 {
				a[b] = 0;
			} a[b] = 0 a[b] a b 0 {
				flag = false;
				System.out.println(0);
				break;
			} flag = false flag false System.out.println(0) System.out.println System.out System System.out 0 break; if(flag){
		s[0] = 1;
		s[1] = 1;
		if(n!=1){
			for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			}
		}
	System.out.println(s[n]);
	} flag {
		s[0] = 1;
		s[1] = 1;
		if(n!=1){
			for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			}
		}
	System.out.println(s[n]);
	} s[0] = 1 s[0] s 0 1 s[1] = 1 s[1] s 1 1 if(n!=1){
			for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			}
		} n!=1 n 1 {
			for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			}
		} for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			} int i = 2; int i = 2; i 2 i < n+1 i n+1 n 1 i++ i++ i {
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			} {
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			} s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007 s[i] s i (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007 (s[i-1]*a[i-1] + s[i-2]*a[i-2]) s[i-1]*a[i-1] s[i-1] s i-1 i 1 a[i-1] a i-1 i 1 s[i-2]*a[i-2] s[i-2] s i-2 i 2 a[i-2] a i-2 i 2 1000000007 System.out.println(s[n]) System.out.println System.out System System.out s[n] s n String[] args args public class Main{
public static void main (String[] args){
	Scanner sc = new Scanner(System.in);
	int n = Integer.parseInt(sc.next());//段数
	int m = Integer.parseInt(sc.next());//破損数
	int[] a = new int[n+1];//破損配列all(01)
	long[] s = new long[n+1];//到達パターン
	boolean flag = true;//到達可能性
	
	for(int i = 0; i<n+1; i++){
		a[i] = 1;
	}
	if(m!=0){
		int b = 0;
		for(int i = 0; i<m; i++){
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		}
	}
	
	if(flag){
		s[0] = 1;
		s[1] = 1;
		if(n!=1){
			for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			}
		}
	System.out.println(s[n]);
	}
	
	}
} public class Main{
public static void main (String[] args){
	Scanner sc = new Scanner(System.in);
	int n = Integer.parseInt(sc.next());//段数
	int m = Integer.parseInt(sc.next());//破損数
	int[] a = new int[n+1];//破損配列all(01)
	long[] s = new long[n+1];//到達パターン
	boolean flag = true;//到達可能性
	
	for(int i = 0; i<n+1; i++){
		a[i] = 1;
	}
	if(m!=0){
		int b = 0;
		for(int i = 0; i<m; i++){
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		}
	}
	
	if(flag){
		s[0] = 1;
		s[1] = 1;
		if(n!=1){
			for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			}
		}
	System.out.println(s[n]);
	}
	
	}
} Main
import java.util.*;
import java.lang.*;
import java.io.*;

public class Main{
public static void main (String[] args){
	Scanner sc = new Scanner(System.in);
	int n = Integer.parseInt(sc.next());//段数
	int m = Integer.parseInt(sc.next());//破損数
	int[] a = new int[n+1];//破損配列all(01)
	long[] s = new long[n+1];//到達パターン
	boolean flag = true;//到達可能性
	
	for(int i = 0; i<n+1; i++){
		a[i] = 1;
	}
	if(m!=0){
		int b = 0;
		for(int i = 0; i<m; i++){
			b = Integer.parseInt(sc.next());
			if(a[b-1] != 0){
				a[b] = 0;
			}else{
				flag = false;
				System.out.println(0);
				break;
			}
		}
	}
	
	if(flag){
		s[0] = 1;
		s[1] = 1;
		if(n!=1){
			for(int i = 2; i < n+1; i++){
				s[i] += (s[i-1]*a[i-1] + s[i-2]*a[i-2])%1000000007;
			}
		}
	System.out.println(s[n]);
	}
	
	}
}