package main

import "fmt"

var memo map[int]int

func stepupN(n int) int {
	if n < 0 {
		return 0
	}
	if n == 0 {
		return 1
	} else if memo[n] > 0 {
		return memo[n]
	} else {
		memo[n] = stepupN(n-1) + stepupN(n-2)
	}
	return memo[n] % 1000000007
}

func main() {
	var n, m int
	fmt.Scan(&n, &m)
	memo = make(map[int]int, n)
	w := make([]int, 0)
	for i := 0; i < m; i++ {
		var bs int
		fmt.Scan(&bs)
		if i > 0 {
			if w[i-1]+1 == bs { //連続して壊れている
				fmt.Println(0)
				return
			} else if w[i-1] == bs {
				continue
			}
		}
		w = append(w, bs)
	}
	w = append(w, n+1) // 番兵
	// 連続して壊れている階段はない
	// 壊れている階段で分けられる複数の階段を考える
	var oks, steps int
	ans := 1
	for i := 0; i < len(w); i++ {
		// w[i] 壊れている階段
		steps = w[i] - oks - 1
		oks = w[i] + 1
		//fmt.Println("i", i, "steps", steps, "oks", oks)
		ans = (ans * stepupN(steps)) % 1000000007
	}
	fmt.Println(ans)
}
