/*
String[]の初期化、整数の型がlongになっているか
関数（splitとかcontainsとか）内では"+"とかは正規表現となされるので"\\+"とする
配列のコピーはarr1=arr.clone()
HashSet<>[]はおのおの初期化した？？？？？
負の数の割り算は絶対値が小さいほうに切り捨てられるex.-1/2=0ので、ある値>kみたいな式だとバグらせやすいので注意
ある値>=kとして、切り上げた値をとるべき
toLowerCase()はアルファベット以外に対して行ってもエラーにはならない
ArrayDequeではpopとpushはStackと同じ操作になる
//import static java.lang.System.*; はしばらく使わなそう(使うとしてもexit(0)のためだけ)←return;でよさそう
最後にout.flush()またはout.close()をするのを忘れずに！
Point2D p2d=new Point2D.Double(d1,d2);
//import static java.lang.System.*;
*/
//入力終了→Ctrl+D
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.geom.Point2D;
import static java.lang.Math.*;
public class Main {
    public static void main(String[] $) {
        int n=sc.nextInt();
        int m=sc.nextInt();
        long mod=1000000007;
        int[] a=new int[100010];
        for (int i = 0; i < m; i++) {
            a[i]=sc.nextInt();
        }
        long[] dp=new long[100010];
        int index=0;
        dp[1]=1;
        dp[2]=2;
        for (int i = 1; i < n + 1; i++) {
            if(index<m&&a[index]==i){
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            }else if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            }
        }
        //out.println(Arrays.toString(dp));
        out.println(dp[n]%mod);
        //out.println(index);
        out.close();
    }

    static PrintWriter out = new PrintWriter(System.out);

    static class sc {
        static Scanner s = new Scanner(System.in);

        static String next() {
            return s.next();
        }

        static String nextLine() {
            return s.nextLine();
        }

        static int nextInt() {
            return Integer.parseInt(s.next());
        }

        static long nextLong() {
            return Long.parseLong(s.next());
        }

        static double nextDouble() {
            return Double.parseDouble(s.next());
        }

        static boolean hasNext() {
            return s.hasNext();
        }
    }
} import java.util.*; util.* java import java.io.*; io.* java import java.awt.*; awt.* java import java.awt.geom.Point2D; Point2D java.awt.geom import static java.lang.Math.*; import static java.lang.Math.*; import static java.lang.Math.*; public class Main {
    public static void main(String[] $) {
        int n=sc.nextInt();
        int m=sc.nextInt();
        long mod=1000000007;
        int[] a=new int[100010];
        for (int i = 0; i < m; i++) {
            a[i]=sc.nextInt();
        }
        long[] dp=new long[100010];
        int index=0;
        dp[1]=1;
        dp[2]=2;
        for (int i = 1; i < n + 1; i++) {
            if(index<m&&a[index]==i){
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            }else if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            }
        }
        //out.println(Arrays.toString(dp));
        out.println(dp[n]%mod);
        //out.println(index);
        out.close();
    }

    static PrintWriter out = new PrintWriter(System.out);

    static class sc {
        static Scanner s = new Scanner(System.in);

        static String next() {
            return s.next();
        }

        static String nextLine() {
            return s.nextLine();
        }

        static int nextInt() {
            return Integer.parseInt(s.next());
        }

        static long nextLong() {
            return Long.parseLong(s.next());
        }

        static double nextDouble() {
            return Double.parseDouble(s.next());
        }

        static boolean hasNext() {
            return s.hasNext();
        }
    }
} Main static PrintWriter out = new PrintWriter(System.out); out new PrintWriter(System.out) public static void main(String[] $) {
        int n=sc.nextInt();
        int m=sc.nextInt();
        long mod=1000000007;
        int[] a=new int[100010];
        for (int i = 0; i < m; i++) {
            a[i]=sc.nextInt();
        }
        long[] dp=new long[100010];
        int index=0;
        dp[1]=1;
        dp[2]=2;
        for (int i = 1; i < n + 1; i++) {
            if(index<m&&a[index]==i){
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            }else if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            }
        }
        //out.println(Arrays.toString(dp));
        out.println(dp[n]%mod);
        //out.println(index);
        out.close();
    } main {
        int n=sc.nextInt();
        int m=sc.nextInt();
        long mod=1000000007;
        int[] a=new int[100010];
        for (int i = 0; i < m; i++) {
            a[i]=sc.nextInt();
        }
        long[] dp=new long[100010];
        int index=0;
        dp[1]=1;
        dp[2]=2;
        for (int i = 1; i < n + 1; i++) {
            if(index<m&&a[index]==i){
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            }else if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            }
        }
        //out.println(Arrays.toString(dp));
        out.println(dp[n]%mod);
        //out.println(index);
        out.close();
    } int n=sc.nextInt(); n sc.nextInt() sc.nextInt sc int m=sc.nextInt(); m sc.nextInt() sc.nextInt sc long mod=1000000007; mod 1000000007 int[] a=new int[100010]; a new int[100010] 100010 for (int i = 0; i < m; i++) {
            a[i]=sc.nextInt();
        } int i = 0; int i = 0; i 0 i < m i m i++ i++ i {
            a[i]=sc.nextInt();
        } {
            a[i]=sc.nextInt();
        } a[i]=sc.nextInt() a[i] a i sc.nextInt() sc.nextInt sc long[] dp=new long[100010]; dp new long[100010] 100010 int index=0; index 0 dp[1]=1 dp[1] dp 1 1 dp[2]=2 dp[2] dp 2 2 for (int i = 1; i < n + 1; i++) {
            if(index<m&&a[index]==i){
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            }else if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            }
        } int i = 1; int i = 1; i 1 i < n + 1 i n + 1 n 1 i++ i++ i {
            if(index<m&&a[index]==i){
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            }else if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            }
        } {
            if(index<m&&a[index]==i){
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            }else if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            }
        } if(index<m&&a[index]==i){
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            }else if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            } index<m&&a[index]==i index<m index m a[index]==i a[index] a index i {
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            } dp[i]=0 dp[i] dp i 0 if(i==1){
                    dp[2]=1;
                } i==1 i 1 {
                    dp[2]=1;
                } dp[2]=1 dp[2] dp 2 1 index++ index if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            } i>2 i 2 {
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            } dp[i]=dp[i-1]%mod+dp[i-2]%mod dp[i] dp i dp[i-1]%mod+dp[i-2]%mod dp[i-1]%mod dp[i-1] dp i-1 i 1 mod dp[i-2]%mod dp[i-2] dp i-2 i 2 mod out.println(dp[n]%mod) out.println out dp[n]%mod dp[n] dp n mod out.close() out.close out String[] $ $ static class sc {
        static Scanner s = new Scanner(System.in);

        static String next() {
            return s.next();
        }

        static String nextLine() {
            return s.nextLine();
        }

        static int nextInt() {
            return Integer.parseInt(s.next());
        }

        static long nextLong() {
            return Long.parseLong(s.next());
        }

        static double nextDouble() {
            return Double.parseDouble(s.next());
        }

        static boolean hasNext() {
            return s.hasNext();
        }
    } sc static Scanner s = new Scanner(System.in); s new Scanner(System.in) static String next() {
            return s.next();
        } next {
            return s.next();
        } return s.next(); s.next() s.next s static String nextLine() {
            return s.nextLine();
        } nextLine {
            return s.nextLine();
        } return s.nextLine(); s.nextLine() s.nextLine s static int nextInt() {
            return Integer.parseInt(s.next());
        } nextInt {
            return Integer.parseInt(s.next());
        } return Integer.parseInt(s.next()); Integer.parseInt(s.next()) Integer.parseInt Integer s.next() s.next s static long nextLong() {
            return Long.parseLong(s.next());
        } nextLong {
            return Long.parseLong(s.next());
        } return Long.parseLong(s.next()); Long.parseLong(s.next()) Long.parseLong Long s.next() s.next s static double nextDouble() {
            return Double.parseDouble(s.next());
        } nextDouble {
            return Double.parseDouble(s.next());
        } return Double.parseDouble(s.next()); Double.parseDouble(s.next()) Double.parseDouble Double s.next() s.next s static boolean hasNext() {
            return s.hasNext();
        } hasNext {
            return s.hasNext();
        } return s.hasNext(); s.hasNext() s.hasNext s public class Main {
    public static void main(String[] $) {
        int n=sc.nextInt();
        int m=sc.nextInt();
        long mod=1000000007;
        int[] a=new int[100010];
        for (int i = 0; i < m; i++) {
            a[i]=sc.nextInt();
        }
        long[] dp=new long[100010];
        int index=0;
        dp[1]=1;
        dp[2]=2;
        for (int i = 1; i < n + 1; i++) {
            if(index<m&&a[index]==i){
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            }else if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            }
        }
        //out.println(Arrays.toString(dp));
        out.println(dp[n]%mod);
        //out.println(index);
        out.close();
    }

    static PrintWriter out = new PrintWriter(System.out);

    static class sc {
        static Scanner s = new Scanner(System.in);

        static String next() {
            return s.next();
        }

        static String nextLine() {
            return s.nextLine();
        }

        static int nextInt() {
            return Integer.parseInt(s.next());
        }

        static long nextLong() {
            return Long.parseLong(s.next());
        }

        static double nextDouble() {
            return Double.parseDouble(s.next());
        }

        static boolean hasNext() {
            return s.hasNext();
        }
    }
} public class Main {
    public static void main(String[] $) {
        int n=sc.nextInt();
        int m=sc.nextInt();
        long mod=1000000007;
        int[] a=new int[100010];
        for (int i = 0; i < m; i++) {
            a[i]=sc.nextInt();
        }
        long[] dp=new long[100010];
        int index=0;
        dp[1]=1;
        dp[2]=2;
        for (int i = 1; i < n + 1; i++) {
            if(index<m&&a[index]==i){
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            }else if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            }
        }
        //out.println(Arrays.toString(dp));
        out.println(dp[n]%mod);
        //out.println(index);
        out.close();
    }

    static PrintWriter out = new PrintWriter(System.out);

    static class sc {
        static Scanner s = new Scanner(System.in);

        static String next() {
            return s.next();
        }

        static String nextLine() {
            return s.nextLine();
        }

        static int nextInt() {
            return Integer.parseInt(s.next());
        }

        static long nextLong() {
            return Long.parseLong(s.next());
        }

        static double nextDouble() {
            return Double.parseDouble(s.next());
        }

        static boolean hasNext() {
            return s.hasNext();
        }
    }
} Main
/*
String[]の初期化、整数の型がlongになっているか
関数（splitとかcontainsとか）内では"+"とかは正規表現となされるので"\\+"とする
配列のコピーはarr1=arr.clone()
HashSet<>[]はおのおの初期化した？？？？？
負の数の割り算は絶対値が小さいほうに切り捨てられるex.-1/2=0ので、ある値>kみたいな式だとバグらせやすいので注意
ある値>=kとして、切り上げた値をとるべき
toLowerCase()はアルファベット以外に対して行ってもエラーにはならない
ArrayDequeではpopとpushはStackと同じ操作になる
//import static java.lang.System.*; はしばらく使わなそう(使うとしてもexit(0)のためだけ)←return;でよさそう
最後にout.flush()またはout.close()をするのを忘れずに！
Point2D p2d=new Point2D.Double(d1,d2);
//import static java.lang.System.*;
*/
//入力終了→Ctrl+D
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.geom.Point2D;
import static java.lang.Math.*;
public class Main {
    public static void main(String[] $) {
        int n=sc.nextInt();
        int m=sc.nextInt();
        long mod=1000000007;
        int[] a=new int[100010];
        for (int i = 0; i < m; i++) {
            a[i]=sc.nextInt();
        }
        long[] dp=new long[100010];
        int index=0;
        dp[1]=1;
        dp[2]=2;
        for (int i = 1; i < n + 1; i++) {
            if(index<m&&a[index]==i){
                dp[i]=0;
                if(i==1){
                    dp[2]=1;
                }
                index++;
            }else if(i>2){
                dp[i]=dp[i-1]%mod+dp[i-2]%mod;
            }
        }
        //out.println(Arrays.toString(dp));
        out.println(dp[n]%mod);
        //out.println(index);
        out.close();
    }

    static PrintWriter out = new PrintWriter(System.out);

    static class sc {
        static Scanner s = new Scanner(System.in);

        static String next() {
            return s.next();
        }

        static String nextLine() {
            return s.nextLine();
        }

        static int nextInt() {
            return Integer.parseInt(s.next());
        }

        static long nextLong() {
            return Long.parseLong(s.next());
        }

        static double nextDouble() {
            return Double.parseDouble(s.next());
        }

        static boolean hasNext() {
            return s.hasNext();
        }
    }
}