object Main {

  def main(args: Array[String]): Unit = {
    val sc = new java.util.Scanner(System.in)

    val N, M = sc.nextInt()
    val A = Array.fill(M)(sc.nextInt()).toSet

    // dp(i) := i段目にたどり着くための移動方法が何通りか？
    // 最終的にdp(N) を求める
    var dpi_a = BigInt(1)
    var dpi_b = BigInt(0)

    if (A.contains(1))
      dpi_b = BigInt(0)
    else
      dpi_b = dpi_a

    (1 until N) foreach { i =>
      if (A.contains(i+1)) {
        // 壊れているので0通り
        dpi_a = dpi_b
        dpi_b = BigInt(0)
      } else { // 壊れていないので, 一個前と二個前のをたす
        val temp = dpi_b
        dpi_b = dpi_a + dpi_b
        dpi_a = temp
      }
    }
    println(dpi_b % 1000000007)
  }

}
