import sys
import functools
import operator

n,m=map(int,input().split())
a=[int(input()) for i in range(m)]

def sum(x):
    if x==1:
        return x
    if x==2:
        return x
    return sum(x-1)+sum(x-2)

c=[] #1段ずつ連続して存在する階段の移動方法がそれぞれ何通りあるか

if m==0:
  print(sum(n))
  sys.exit()

if m==1 and n==1:
  print('0')
  sys.exit()

if m==1 and n==2:
  print('1')
  sys.exit()
  
for i in range(1,m):
  if a[i]-a[i-1]==1:
    print('0')
    sys.exit()

if a[0]==1:
  for i in range(1,m):
    if i==1:
      c.append(sum(a[i]-2))
    else:
      if a[i]-a[i-1]>2:
        c.append(sum(a[i]-a[i-1]-2))

else:
  for i in range(m):
    if i==0:
      c.append(sum(a[i]-1))
    else:
      if a[i]-a[i-1]>1:
        c.append(sum(a[i]-a[i-1]-2))

if n-a[-1]!=1:
  c.append(sum(n-a[-1]-1))

p=functools.reduce(operator.mul,c)

print(p%1000000007)