import java.util.Scanner;

public class Main {

	static final int MOD = 1000000007;

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());
		int M = Integer.parseInt(sc.next());
		boolean[] a = new boolean[N + 1];
		for (int i = 0; i < M; i++) {
			a[Integer.parseInt(sc.next())] = true;
		}
		sc.close();

		long[] ans = new long[N + 1];
		ans[0] = 1;
		ans[1] = a[1] ? 0 : 1;
		for (int i = 2; i <= N; i++) {
			if (a[i]) {
				ans[i] = 0;
			} else {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			}
		}
		System.out.println(getMod(ans[N]));

	}

	static long getMod(long a) {
		return a >= 0 ? a % MOD : MOD + a % MOD;
	}

} import java.util.Scanner; Scanner java.util public class Main {

	static final int MOD = 1000000007;

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());
		int M = Integer.parseInt(sc.next());
		boolean[] a = new boolean[N + 1];
		for (int i = 0; i < M; i++) {
			a[Integer.parseInt(sc.next())] = true;
		}
		sc.close();

		long[] ans = new long[N + 1];
		ans[0] = 1;
		ans[1] = a[1] ? 0 : 1;
		for (int i = 2; i <= N; i++) {
			if (a[i]) {
				ans[i] = 0;
			} else {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			}
		}
		System.out.println(getMod(ans[N]));

	}

	static long getMod(long a) {
		return a >= 0 ? a % MOD : MOD + a % MOD;
	}

} Main static final int MOD = 1000000007; MOD 1000000007 public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());
		int M = Integer.parseInt(sc.next());
		boolean[] a = new boolean[N + 1];
		for (int i = 0; i < M; i++) {
			a[Integer.parseInt(sc.next())] = true;
		}
		sc.close();

		long[] ans = new long[N + 1];
		ans[0] = 1;
		ans[1] = a[1] ? 0 : 1;
		for (int i = 2; i <= N; i++) {
			if (a[i]) {
				ans[i] = 0;
			} else {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			}
		}
		System.out.println(getMod(ans[N]));

	} main {

		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());
		int M = Integer.parseInt(sc.next());
		boolean[] a = new boolean[N + 1];
		for (int i = 0; i < M; i++) {
			a[Integer.parseInt(sc.next())] = true;
		}
		sc.close();

		long[] ans = new long[N + 1];
		ans[0] = 1;
		ans[1] = a[1] ? 0 : 1;
		for (int i = 2; i <= N; i++) {
			if (a[i]) {
				ans[i] = 0;
			} else {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			}
		}
		System.out.println(getMod(ans[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 boolean[] a = new boolean[N + 1]; a new boolean[N + 1] N + 1 N 1 for (int i = 0; i < M; i++) {
			a[Integer.parseInt(sc.next())] = true;
		} int i = 0; int i = 0; i 0 i < M i M i++ i++ i {
			a[Integer.parseInt(sc.next())] = true;
		} {
			a[Integer.parseInt(sc.next())] = true;
		} a[Integer.parseInt(sc.next())] = true a[Integer.parseInt(sc.next())] a Integer.parseInt(sc.next()) Integer.parseInt Integer sc.next() sc.next sc true sc.close() sc.close sc long[] ans = new long[N + 1]; ans new long[N + 1] N + 1 N 1 ans[0] = 1 ans[0] ans 0 1 ans[1] = a[1] ? 0 : 1 ans[1] ans 1 a[1] ? 0 : 1 a[1] a 1 0 1 for (int i = 2; i <= N; i++) {
			if (a[i]) {
				ans[i] = 0;
			} else {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			}
		} int i = 2; int i = 2; i 2 i <= N i N i++ i++ i {
			if (a[i]) {
				ans[i] = 0;
			} else {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			}
		} {
			if (a[i]) {
				ans[i] = 0;
			} else {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			}
		} if (a[i]) {
				ans[i] = 0;
			} else {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			} a[i] a i {
				ans[i] = 0;
			} ans[i] = 0 ans[i] ans i 0 {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			} ans[i] = getMod(ans[i - 1] + ans[i - 2]) ans[i] ans i getMod(ans[i - 1] + ans[i - 2]) getMod ans[i - 1] + ans[i - 2] ans[i - 1] ans i - 1 i 1 ans[i - 2] ans i - 2 i 2 System.out.println(getMod(ans[N])) System.out.println System.out System System.out getMod(ans[N]) getMod ans[N] ans N String[] args args static long getMod(long a) {
		return a >= 0 ? a % MOD : MOD + a % MOD;
	} getMod {
		return a >= 0 ? a % MOD : MOD + a % MOD;
	} return a >= 0 ? a % MOD : MOD + a % MOD; a >= 0 ? a % MOD : MOD + a % MOD a >= 0 a 0 a % MOD a MOD MOD + a % MOD MOD a % MOD a MOD long a a public class Main {

	static final int MOD = 1000000007;

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());
		int M = Integer.parseInt(sc.next());
		boolean[] a = new boolean[N + 1];
		for (int i = 0; i < M; i++) {
			a[Integer.parseInt(sc.next())] = true;
		}
		sc.close();

		long[] ans = new long[N + 1];
		ans[0] = 1;
		ans[1] = a[1] ? 0 : 1;
		for (int i = 2; i <= N; i++) {
			if (a[i]) {
				ans[i] = 0;
			} else {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			}
		}
		System.out.println(getMod(ans[N]));

	}

	static long getMod(long a) {
		return a >= 0 ? a % MOD : MOD + a % MOD;
	}

} public class Main {

	static final int MOD = 1000000007;

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());
		int M = Integer.parseInt(sc.next());
		boolean[] a = new boolean[N + 1];
		for (int i = 0; i < M; i++) {
			a[Integer.parseInt(sc.next())] = true;
		}
		sc.close();

		long[] ans = new long[N + 1];
		ans[0] = 1;
		ans[1] = a[1] ? 0 : 1;
		for (int i = 2; i <= N; i++) {
			if (a[i]) {
				ans[i] = 0;
			} else {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			}
		}
		System.out.println(getMod(ans[N]));

	}

	static long getMod(long a) {
		return a >= 0 ? a % MOD : MOD + a % MOD;
	}

} Main
import java.util.Scanner;

public class Main {

	static final int MOD = 1000000007;

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		int N = Integer.parseInt(sc.next());
		int M = Integer.parseInt(sc.next());
		boolean[] a = new boolean[N + 1];
		for (int i = 0; i < M; i++) {
			a[Integer.parseInt(sc.next())] = true;
		}
		sc.close();

		long[] ans = new long[N + 1];
		ans[0] = 1;
		ans[1] = a[1] ? 0 : 1;
		for (int i = 2; i <= N; i++) {
			if (a[i]) {
				ans[i] = 0;
			} else {
				ans[i] = getMod(ans[i - 1] + ans[i - 2]);
			}
		}
		System.out.println(getMod(ans[N]));

	}

	static long getMod(long a) {
		return a >= 0 ? a % MOD : MOD + a % MOD;
	}

}