import numpy as np
import math

N, M = map(int, input().split())
a = np.zeros(M)
for i in range(M):
  a[i] = np.array(int(input()))

count_even = 0
count_odd = 0
count_all = 0
dcount_all = 1

if N % 2 == 0:
  for s2 in range(0, int(N/2) + 1):
    s1 = int(N - 2*s2)
    count_even += (math.factorial(s1+ s2)) / ((math.factorial(s1)) * (math.factorial(s2)))
else:
  for s2 in range(0, int((N-1)/2) + 1):
    s1 = int((N-1) - 2*s2)
    count_odd += (math.factorial(s1+ s2)) / ((math.factorial(s1)) * (math.factorial(s2)))
count_all += count_even + count_odd 

a = np.append(a, np.array([0, N]))
a = np.sort(a)

for j in range(0, M+1):
  dcount_even = 0
  dcount_odd = 0
  if a[j] != 0 and a[j] != N-1 and a[j+1] - a[j] == 1:
    dcount_all = count_all
    break
  elif (a[j+1] - a[j]) % 2 == 0:
    for ds2 in range(0, int((a[j+1] - a[j])/2) + 1):
      ds1 = int(a[j+1] - a[j] - 2*ds2 +1)
      dcount_even += (math.factorial(ds1 + ds2)) / ((math.factorial(ds1)) * (math.factorial(ds2)))
  else:
    for ds2 in range(0, int((a[j+1] - a[j] - 1)/2) + 1):
      ds1 = int(a[j+1] - a[j] -1 - 2*ds2 +1)
      dcount_odd += (math.factorial(ds1 + ds2)) / ((math.factorial(ds1)) * (math.factorial(ds2)))
  dcount_all *= dcount_even + dcount_odd
count = int((count_all - dcount_all) % 1000000007)
print(count)