import java.io.*;
import java.util.*;
public class Main{
    public static void main(String[] args) throws IOException{
        Reader r = new Reader();        
        int N, M;
        long C = 1000000007;
        {int[] a = r.ii(); N = a[0]; M = a[1];}
        int[] a = new int[M];
        for(int i = 0; i < M; i++){
            a[i] = r.i();
        }
        int[] broken = new int[N+1];
        for(int temp : a){
            broken[temp] = 1;
        }
        long[] f = new long[N+1];
        f[0] = 1;
        f[1] = broken[1] == 1 ? 0 : 1;        
        for(int i = 2; i <= N; i++){
            if(broken[i] == 0)
                f[i] = (f[i-1] + f[i-2])%C;
        }
        println(f[N]);
    }
    static void print(Object o){
        System.out.print(o.toString());
    }
    static void println(Object o){
        System.out.println(o.toString());
    }
    static int Int(String s){
        return Integer.parseInt(s);
    }
    static long Long(String s){
        return Long.parseLong(s);
    }
    static class Reader extends BufferedReader{
        Reader(){
            super(new InputStreamReader(System.in));
        }
        String s() throws IOException{
            return readLine();
        }
        String[] ss() throws IOException{
            return s().split(" ");
        }
        int i() throws IOException{
            return Int(s());
        }
        int[] ii() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            int[] ii = new int[size];
            for(int j = 0; j < size; j++) ii[j] = Int(ss[j]);
            return ii;
        }
        long l() throws IOException{
            return Long(s());
        }
        long[] ll() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            long[] ll = new long[size];
            for(int j = 0; j < size; j++) ll[j] = Long(ss[j]);            
            return ll;
        }
    }
} import java.io.*; io.* java import java.util.*; util.* java public class Main{
    public static void main(String[] args) throws IOException{
        Reader r = new Reader();        
        int N, M;
        long C = 1000000007;
        {int[] a = r.ii(); N = a[0]; M = a[1];}
        int[] a = new int[M];
        for(int i = 0; i < M; i++){
            a[i] = r.i();
        }
        int[] broken = new int[N+1];
        for(int temp : a){
            broken[temp] = 1;
        }
        long[] f = new long[N+1];
        f[0] = 1;
        f[1] = broken[1] == 1 ? 0 : 1;        
        for(int i = 2; i <= N; i++){
            if(broken[i] == 0)
                f[i] = (f[i-1] + f[i-2])%C;
        }
        println(f[N]);
    }
    static void print(Object o){
        System.out.print(o.toString());
    }
    static void println(Object o){
        System.out.println(o.toString());
    }
    static int Int(String s){
        return Integer.parseInt(s);
    }
    static long Long(String s){
        return Long.parseLong(s);
    }
    static class Reader extends BufferedReader{
        Reader(){
            super(new InputStreamReader(System.in));
        }
        String s() throws IOException{
            return readLine();
        }
        String[] ss() throws IOException{
            return s().split(" ");
        }
        int i() throws IOException{
            return Int(s());
        }
        int[] ii() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            int[] ii = new int[size];
            for(int j = 0; j < size; j++) ii[j] = Int(ss[j]);
            return ii;
        }
        long l() throws IOException{
            return Long(s());
        }
        long[] ll() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            long[] ll = new long[size];
            for(int j = 0; j < size; j++) ll[j] = Long(ss[j]);            
            return ll;
        }
    }
} Main public static void main(String[] args) throws IOException{
        Reader r = new Reader();        
        int N, M;
        long C = 1000000007;
        {int[] a = r.ii(); N = a[0]; M = a[1];}
        int[] a = new int[M];
        for(int i = 0; i < M; i++){
            a[i] = r.i();
        }
        int[] broken = new int[N+1];
        for(int temp : a){
            broken[temp] = 1;
        }
        long[] f = new long[N+1];
        f[0] = 1;
        f[1] = broken[1] == 1 ? 0 : 1;        
        for(int i = 2; i <= N; i++){
            if(broken[i] == 0)
                f[i] = (f[i-1] + f[i-2])%C;
        }
        println(f[N]);
    } main {
        Reader r = new Reader();        
        int N, M;
        long C = 1000000007;
        {int[] a = r.ii(); N = a[0]; M = a[1];}
        int[] a = new int[M];
        for(int i = 0; i < M; i++){
            a[i] = r.i();
        }
        int[] broken = new int[N+1];
        for(int temp : a){
            broken[temp] = 1;
        }
        long[] f = new long[N+1];
        f[0] = 1;
        f[1] = broken[1] == 1 ? 0 : 1;        
        for(int i = 2; i <= N; i++){
            if(broken[i] == 0)
                f[i] = (f[i-1] + f[i-2])%C;
        }
        println(f[N]);
    } Reader r = new Reader(); r new Reader() int N N M; M long C = 1000000007; C 1000000007 {int[] a = r.ii(); N = a[0]; M = a[1];} int[] a = r.ii(); a r.ii() r.ii r N = a[0] N a[0] a 0 M = a[1] M a[1] a 1 int[] a = new int[M]; a new int[M] M for(int i = 0; i < M; i++){
            a[i] = r.i();
        } int i = 0; int i = 0; i 0 i < M i M i++ i++ i {
            a[i] = r.i();
        } {
            a[i] = r.i();
        } a[i] = r.i() a[i] a i r.i() r.i r int[] broken = new int[N+1]; broken new int[N+1] N+1 N 1 for(int temp : a){
            broken[temp] = 1;
        } int temp a {
            broken[temp] = 1;
        } {
            broken[temp] = 1;
        } broken[temp] = 1 broken[temp] broken temp 1 long[] f = new long[N+1]; f new long[N+1] N+1 N 1 f[0] = 1 f[0] f 0 1 f[1] = broken[1] == 1 ? 0 : 1 f[1] f 1 broken[1] == 1 ? 0 : 1 broken[1] == 1 broken[1] broken 1 1 0 1 for(int i = 2; i <= N; i++){
            if(broken[i] == 0)
                f[i] = (f[i-1] + f[i-2])%C;
        } int i = 2; int i = 2; i 2 i <= N i N i++ i++ i {
            if(broken[i] == 0)
                f[i] = (f[i-1] + f[i-2])%C;
        } {
            if(broken[i] == 0)
                f[i] = (f[i-1] + f[i-2])%C;
        } if(broken[i] == 0)
                f[i] = (f[i-1] + f[i-2])%C; broken[i] == 0 broken[i] broken i 0 f[i] = (f[i-1] + f[i-2])%C f[i] f i (f[i-1] + f[i-2])%C (f[i-1] + f[i-2]) f[i-1] f i-1 i 1 f[i-2] f i-2 i 2 C println(f[N]) println f[N] f N String[] args args static void print(Object o){
        System.out.print(o.toString());
    } print {
        System.out.print(o.toString());
    } System.out.print(o.toString()) System.out.print System.out System System.out o.toString() o.toString o Object o o static void println(Object o){
        System.out.println(o.toString());
    } println {
        System.out.println(o.toString());
    } System.out.println(o.toString()) System.out.println System.out System System.out o.toString() o.toString o Object o o static int Int(String s){
        return Integer.parseInt(s);
    } Int {
        return Integer.parseInt(s);
    } return Integer.parseInt(s); Integer.parseInt(s) Integer.parseInt Integer s String s s static long Long(String s){
        return Long.parseLong(s);
    } Long {
        return Long.parseLong(s);
    } return Long.parseLong(s); Long.parseLong(s) Long.parseLong Long s String s s static class Reader extends BufferedReader{
        Reader(){
            super(new InputStreamReader(System.in));
        }
        String s() throws IOException{
            return readLine();
        }
        String[] ss() throws IOException{
            return s().split(" ");
        }
        int i() throws IOException{
            return Int(s());
        }
        int[] ii() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            int[] ii = new int[size];
            for(int j = 0; j < size; j++) ii[j] = Int(ss[j]);
            return ii;
        }
        long l() throws IOException{
            return Long(s());
        }
        long[] ll() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            long[] ll = new long[size];
            for(int j = 0; j < size; j++) ll[j] = Long(ss[j]);            
            return ll;
        }
    } Reader Reader(){
            super(new InputStreamReader(System.in));
        } Reader {
            super(new InputStreamReader(System.in));
        } super(new InputStreamReader(System.in)) super new InputStreamReader(System.in) String s() throws IOException{
            return readLine();
        } s {
            return readLine();
        } return readLine(); readLine() readLine String[] ss() throws IOException{
            return s().split(" ");
        } ss {
            return s().split(" ");
        } return s().split(" "); s().split(" ") s().split s() s " " int i() throws IOException{
            return Int(s());
        } i {
            return Int(s());
        } return Int(s()); Int(s()) Int s() s int[] ii() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            int[] ii = new int[size];
            for(int j = 0; j < size; j++) ii[j] = Int(ss[j]);
            return ii;
        } ii {
            String[] ss = ss();
            int size = ss.length;
            int[] ii = new int[size];
            for(int j = 0; j < size; j++) ii[j] = Int(ss[j]);
            return ii;
        } String[] ss = ss(); ss ss() ss int size = ss.length; size ss.length ss ss.length int[] ii = new int[size]; ii new int[size] size for(int j = 0; j < size; j++) ii[j] = Int(ss[j]); int j = 0; int j = 0; j 0 j < size j size j++ j++ j ii[j] = Int(ss[j]); ii[j] = Int(ss[j]) ii[j] ii j Int(ss[j]) Int ss[j] ss j return ii; ii long l() throws IOException{
            return Long(s());
        } l {
            return Long(s());
        } return Long(s()); Long(s()) Long s() s long[] ll() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            long[] ll = new long[size];
            for(int j = 0; j < size; j++) ll[j] = Long(ss[j]);            
            return ll;
        } ll {
            String[] ss = ss();
            int size = ss.length;
            long[] ll = new long[size];
            for(int j = 0; j < size; j++) ll[j] = Long(ss[j]);            
            return ll;
        } String[] ss = ss(); ss ss() ss int size = ss.length; size ss.length ss ss.length long[] ll = new long[size]; ll new long[size] size for(int j = 0; j < size; j++) ll[j] = Long(ss[j]); int j = 0; int j = 0; j 0 j < size j size j++ j++ j ll[j] = Long(ss[j]); ll[j] = Long(ss[j]) ll[j] ll j Long(ss[j]) Long ss[j] ss j return ll; ll BufferedReader public class Main{
    public static void main(String[] args) throws IOException{
        Reader r = new Reader();        
        int N, M;
        long C = 1000000007;
        {int[] a = r.ii(); N = a[0]; M = a[1];}
        int[] a = new int[M];
        for(int i = 0; i < M; i++){
            a[i] = r.i();
        }
        int[] broken = new int[N+1];
        for(int temp : a){
            broken[temp] = 1;
        }
        long[] f = new long[N+1];
        f[0] = 1;
        f[1] = broken[1] == 1 ? 0 : 1;        
        for(int i = 2; i <= N; i++){
            if(broken[i] == 0)
                f[i] = (f[i-1] + f[i-2])%C;
        }
        println(f[N]);
    }
    static void print(Object o){
        System.out.print(o.toString());
    }
    static void println(Object o){
        System.out.println(o.toString());
    }
    static int Int(String s){
        return Integer.parseInt(s);
    }
    static long Long(String s){
        return Long.parseLong(s);
    }
    static class Reader extends BufferedReader{
        Reader(){
            super(new InputStreamReader(System.in));
        }
        String s() throws IOException{
            return readLine();
        }
        String[] ss() throws IOException{
            return s().split(" ");
        }
        int i() throws IOException{
            return Int(s());
        }
        int[] ii() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            int[] ii = new int[size];
            for(int j = 0; j < size; j++) ii[j] = Int(ss[j]);
            return ii;
        }
        long l() throws IOException{
            return Long(s());
        }
        long[] ll() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            long[] ll = new long[size];
            for(int j = 0; j < size; j++) ll[j] = Long(ss[j]);            
            return ll;
        }
    }
} public class Main{
    public static void main(String[] args) throws IOException{
        Reader r = new Reader();        
        int N, M;
        long C = 1000000007;
        {int[] a = r.ii(); N = a[0]; M = a[1];}
        int[] a = new int[M];
        for(int i = 0; i < M; i++){
            a[i] = r.i();
        }
        int[] broken = new int[N+1];
        for(int temp : a){
            broken[temp] = 1;
        }
        long[] f = new long[N+1];
        f[0] = 1;
        f[1] = broken[1] == 1 ? 0 : 1;        
        for(int i = 2; i <= N; i++){
            if(broken[i] == 0)
                f[i] = (f[i-1] + f[i-2])%C;
        }
        println(f[N]);
    }
    static void print(Object o){
        System.out.print(o.toString());
    }
    static void println(Object o){
        System.out.println(o.toString());
    }
    static int Int(String s){
        return Integer.parseInt(s);
    }
    static long Long(String s){
        return Long.parseLong(s);
    }
    static class Reader extends BufferedReader{
        Reader(){
            super(new InputStreamReader(System.in));
        }
        String s() throws IOException{
            return readLine();
        }
        String[] ss() throws IOException{
            return s().split(" ");
        }
        int i() throws IOException{
            return Int(s());
        }
        int[] ii() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            int[] ii = new int[size];
            for(int j = 0; j < size; j++) ii[j] = Int(ss[j]);
            return ii;
        }
        long l() throws IOException{
            return Long(s());
        }
        long[] ll() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            long[] ll = new long[size];
            for(int j = 0; j < size; j++) ll[j] = Long(ss[j]);            
            return ll;
        }
    }
} Main
import java.io.*;
import java.util.*;
public class Main{
    public static void main(String[] args) throws IOException{
        Reader r = new Reader();        
        int N, M;
        long C = 1000000007;
        {int[] a = r.ii(); N = a[0]; M = a[1];}
        int[] a = new int[M];
        for(int i = 0; i < M; i++){
            a[i] = r.i();
        }
        int[] broken = new int[N+1];
        for(int temp : a){
            broken[temp] = 1;
        }
        long[] f = new long[N+1];
        f[0] = 1;
        f[1] = broken[1] == 1 ? 0 : 1;        
        for(int i = 2; i <= N; i++){
            if(broken[i] == 0)
                f[i] = (f[i-1] + f[i-2])%C;
        }
        println(f[N]);
    }
    static void print(Object o){
        System.out.print(o.toString());
    }
    static void println(Object o){
        System.out.println(o.toString());
    }
    static int Int(String s){
        return Integer.parseInt(s);
    }
    static long Long(String s){
        return Long.parseLong(s);
    }
    static class Reader extends BufferedReader{
        Reader(){
            super(new InputStreamReader(System.in));
        }
        String s() throws IOException{
            return readLine();
        }
        String[] ss() throws IOException{
            return s().split(" ");
        }
        int i() throws IOException{
            return Int(s());
        }
        int[] ii() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            int[] ii = new int[size];
            for(int j = 0; j < size; j++) ii[j] = Int(ss[j]);
            return ii;
        }
        long l() throws IOException{
            return Long(s());
        }
        long[] ll() throws IOException{
            String[] ss = ss();
            int size = ss.length;
            long[] ll = new long[size];
            for(int j = 0; j < size; j++) ll[j] = Long(ss[j]);            
            return ll;
        }
    }
}
