import sys

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

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


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

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

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

c.append(sum(n-a[-1]-1))


import functools
import operator

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

print(p%1000000007)