using static System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Typical_Stairs2
{
    class Program
    {
        static void Main(string[] args)
        {
            //以下入力時の処理
            string input = ReadLine();            
            string[] array = input.Split(' ');
            var totalStep = ulong.Parse(array[0]);//零段目を抜いた段数の総数なので＋１
            var totalBrokenStep =ulong.Parse( array[1]);//壊れた段の総数
            var step = new ulong[totalStep + 1];//零段目も含めた段数分の箱を用意
            var brokenStep = new ulong[totalBrokenStep + 2];//壊れた階段用の箱を用意
            for (ulong i = 0; i < totalBrokenStep ; i++) {
                brokenStep[i] = ulong.Parse(ReadLine()); //一行ずつ読み込み
            }//壊れた階段段数を記録
            step[0] = 1;//0段目は一通りなので
                //以下」一段目以降の処理//
                ulong count = 0;//壊れた階段＝＝処理中の段数となったときに比較する壊れた段数を次に移すために使う
            for (ulong j = 1; j < totalStep+1; j++) {
                
                if ( j< 2)
                {
                    step[j] = step[j - 1] ;//totalStep==1の時step[j-2]は存在しない
                }
                else {
                    step[j] = step[j - 1] + step[j - 2]; //一つ前への行き方と二つ前への生き方の総和を代入           
                }
                if (j == brokenStep[count])
                { //j段目の値＝＝壊れた階段の時にstep[j]=0を代入
                    step[j] = 0;
                    count++;//処理する段数を次に移すうつす
                }
            }
            ulong N = 1000000007;///定数
            WriteLine(step[totalStep] % N);//結果を表示
            ReadKey();

        }
    }
}
