package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var sc = bufio.NewScanner(os.Stdin)

// 一行読み出し
func nextLine() string {
	sc.Scan()
	return sc.Text()
}

// 文字列リバース関数
func strReverse(s string) string {
	rs := []rune(s)
	for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
		rs[i], rs[j] = rs[j], rs[i]
	}
	return string(rs)
}

// スペース区切りの文字列から int のスライスを得る
func intSlice(s string) []int {
	ss := strings.Split(s, " ")
	res := make([]int, len(ss))
	for i, v := range ss {
		iv, _ := strconv.Atoi(v)
		res[i] = iv
	}

	return res
}

var limit int = 1000000007
var breaks []int

func main() {
	var n, m int
    fmt.Scan(&n, &m)
	breaks = make([]int, m)
    for i := 0; i < m; i++ {
		fmt.Scan(&breaks[i])
	}

	ans := 0
	ans += step(1, n)
	ans += step(2, n)

	if ans < limit {
		fmt.Println(ans)
	} else {
		fmt.Println(ans % limit)
	}
}

func step(p, n int) int {

	if p == n {
		return 1
	} else if p > n || contain(p) {
		return 0
	} else {
		x := step(p+1, n)
		y := step(p+2, n)
		return x + y
	}

}

func contain(p int) bool{
	for _, v := range breaks {
		if p == v {
			return true
		}
	}

	return false
}
