import java.util.Scanner

object MyMath {

  def mpow(m: Long)(b: Long, e: Long): Long = {
    def doMpow(r: Long, b: Long, e: Long): Long = {
      if (e == 0) r
      else {
        val r1 = if ((e & 1) == 1) (r * b) % m else r
        doMpow(r1, (b * b) % m, e >> 1)
      }
    }
    doMpow(1, b, e)
  }

  def mfact(m: Long)(n: Long, nend: Long = 1): Long = {
    def doMfact(n: Long, r: Long): Long = {
      if (n < nend) r
      else doMfact(n - 1, (r * n) % m)
    }
    doMfact(n, 1)
  }

  def mconb(m: Long)(n: Long, k: Long): Long = {
    def pow: (Long, Long) => Long = mpow(m)
    def fact: (Long, Long) => Long = mfact(m)

    (fact(n, n - k + 1) * pow(fact(k, 1), m - 2)) % m
  }

}

object Main {
  def main(args: Array[String]) {
    if (args.length > 0 && args(0) == "TEST") {
      println(test())
    } else {
      val input = io.Source.stdin.getLines().mkString("\n")
      println(solve(input).trim())
    }
  }

  val mod = 1000000007L
  def comb: (Long, Long) => Long = MyMath.mconb(mod)

  def calcSteps(stairs: Long, twoSteps: Long): Long = comb(stairs - twoSteps, twoSteps)
  def calcPatterns(stairs: Long): Long = {
    if (stairs < 0) 0
    else {
      var sum: Long = 0
      (0L to stairs / 2).foreach(twoSteps => sum = (sum + calcSteps(stairs, twoSteps)) % mod)
      sum
    }
  }

  def solve(input: String): String = {
    val s: Scanner = new Scanner(input)
    val n, m = s.nextInt
    val al: List[Long] = List.fill(m)(s.nextLong)
    var aprev = -1L
    var p = 1L
    al.foreach { a =>
      p = (p * calcPatterns(a - 2L - aprev)) % mod
      aprev = a
    }
    p = (p * calcPatterns((n + 1) - 2L - aprev)) % mod
    p.toString
  }

  val tests = List(
    """6 1
      |3
    """.stripMargin -> """4""",
    """10 2
      |4
      |5
    """.stripMargin -> """0""",
    """100 5
      |1
      |23
      |45
      |67
      |89
    """.stripMargin -> """608200469"""
  )

  def test(): String = tests.map { case (i, o) => (i.trim(), o.trim()) }
    .zipWithIndex.map {
    case ((input, outputExpect), i) =>
      val output = solve(input).trim()
      val tnum = i + 1
      s"test$tnum:" + (
        if (output == outputExpect) "Passed"
        else s"Failed\nexpect:\n$outputExpect\noutput:\n$output")
  }
    .mkString("\n")
}