N_M = [int(e) for e in input().split()]
div = 1000000007
a=[]
flag=1
for i in range(N_M[1]):
  a.append(int(input()))
  if(i>=1 and a[i]=a[i-1]+1):
    print(0)
    flag=0

def num(stair):
  number=0
  if(stair==0):
    return 1
  elif(stair==1):
    return 1
  elif(stair==2):
    return 2
  elif(stair>2):
    number += num(stair-1)
    number += num(stair-2)
  return number

if(flag==1){
	stair = []
	for i in range(N_M[0]+1):
  		stair.append(i)
	stairs = [[]]
	start=0
	for i in range(len(a)+1):
  		if(i==len(a)):
    		stairs.append(stair[start:N_M[0]+1])
    		break
  		stairs.append(stair[start:a[i]])
  		start=a[i]+1

	stairs = [x for x in stairs if x]
	answers = []
	for i in range(len(stairs)):
  		answers.append(num(len(stairs[i])-1))

	answer=1
	for i in range(len(answers)):
  		answer *= answers[i]
	print(answer%div)
}