using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class MainClass
{

	public static void Main(string[] args)
	{
	

		
		kekka.Add(10 ,89);
		kekka.Add(11 ,144);
		kekka.Add(12 ,233);
		kekka.Add(13 ,377);
		kekka.Add(14 ,610);
		kekka.Add(15 ,987);
		kekka.Add(16 ,1597);
		kekka.Add(17 ,2584);
		kekka.Add(18 ,4181);
		kekka.Add(19 ,6765);
		kekka.Add(20 ,10946);
		kekka.Add(21 ,17711);
		kekka.Add(22 ,28657);
		kekka.Add(23 ,46368);
		kekka.Add(24 ,75025);
		kekka.Add(25 ,121393);
		kekka.Add(26 ,196418);
		kekka.Add(27 ,317811);
		kekka.Add(28 ,514229);
		kekka.Add(29 ,832040);
		kekka.Add(30 ,1346269);
		kekka.Add(31 ,2178309);
		kekka.Add(32 ,3524578);
		kekka.Add(33 ,5702887);
		kekka.Add(34 ,9227465);
		kekka.Add(35 ,14930352);
		kekka.Add(36 ,24157817);
		kekka.Add(37 ,39088169);
		kekka.Add(38 ,63245986);
		kekka.Add(39 ,102334155);
		kekka.Add(40 ,165580141);
		kekka.Add(41 ,267914296);
		kekka.Add(42 ,433494437);
		kekka.Add(43 ,701408733);
		kekka.Add(44 ,1134903170);
		kekka.Add(45 ,1836311903);
		kekka.Add(46 ,2971215073);
		kekka.Add(47 ,4807526976);
				for(int i = 46; i<100;i++)
		{
			Console.WriteLine("kekka.Add("+i+" ,"+CountPattern(i)+");");
		}
		

		string[] s = Console.ReadLine().Split(' ');
		int n = int.Parse(s[0]);
		int m = int.Parse(s[1]);
		
		bool[] a = new bool[n];
		int last = -10;
		int q = 0;
		long ppp = 1;
		for(int i = 0; i < m; i++)
		{
			int index = int.Parse(Console.ReadLine());
			if(index == last+1) {
				Console.WriteLine(0);
				return;
			}
			a[index]=true;
			
			int o = Math.Max(0,last+1);
			if(index-o-1>1)
			{
				q = (index-1-o);
				ppp *= CountPattern(q);
				ppp %= 1000000007;
			}
			last = index;
		}
		q = (n-Math.Max(0,last+1));
		if(q>1)
		{
			ppp *= Math.Max(1,CountPattern(q));
		
		}
		
		
		Console.WriteLine(ppp%1000000007);
	
		
	}
	public static long count;
	public static Dictionary<int,long> kekka = new Dictionary<int,long>();
	public static long CountPattern(int n)
	{
		count = 0;
		if(kekka.ContainsKey(n))
			return kekka[n];
		C(0, n);
		kekka.Add(n,count);
		return count;
	}
	
	public static void C(int p, int n)
	{
		A(p,n);
		B(p,n);
	}
	
	public static bool A(int p, int n)
	{
		p+=2;
		
		if(p==n) {
			count++;
			return true;
		}
		if(p<n) {
			C(p,n);
		}
		return false;
	}
	
	public static bool B(int p, int n)
	{
		p+=1;
		if(p==n) {
			count++;
			return true;
		}
		if(p<n) {
			C(p,n);
		}
		return false;
	}

	public static int Clamp(int val, int max, int min = 0)
	{
		return Math.Min(max, Math.Max(min, val));
	}

	
}

