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

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

  jump = key / 2
  tmp = 0
  0.upto(jump) do |i|
    # jumpとstepの合計の中からjumpを取る組み合わせ
    # 計算量気にして前回ループの結果を使う
    if i==0
      tmp = 1
    elsif i==1
      tmp = key-1
    else
      a=key-2*i+i
      tmp = tmp*(a-i+1)*(a-i+2)/(a+1)/i % DIV
    end
    cnt_combi += tmp
  end

  temp = 1
    1.upto(val) do
      temp = temp * cnt_combi % DIV
    end
  cnt = cnt * temp % DIV
end

puts cnt % DIV