class MyLib
  def combi(x,y)
    y=x-y if 2*y > x
    return 1 if y == 0
    ((x-y+1)..x).reduce(&:*)/((1..y).reduce(&:*))
  end
end

n, m = gets.split.map(&:to_i)
aa =
  readlines.map do |i|
    i.chomp.to_i
  end.to_a

DIV = 1_000_000_007
cnt = 1
step = Hash.new(0)
st = 0
aa.each do |a|
  if (a-1)-st < 0
    # できない
    puts 0
    exit
  end
  step[(a-1)-st]+=1
  st = a+1
end
# 最後の水から最後の階段まで
step[n-st]+=1 if st<n #TODO あってる？

step.each_pair do |key, val|
  #stepの組み合わせ数
  cnt_combi = 0

  jump = key / 2
  0.upto(jump) do |i|
    # jumpとstepの合計の中からjumpを取る組み合わせ
    cnt_combi += MyLib.new.combi(key-2*i+i, i)
  end
  cnt = cnt * (cnt_combi ** val % DIV) % DIV
end

puts cnt % DIV
