<?php
# C - Typical Stairs

fscanf(STDIN, "%d %d", $N, $M);

$broken_stair = [];
for ( $i = 0 ; $i < $M ; $i++ ) {
    $broken_stair[] = intval(fgets(STDIN));
}

#連続した壊れた階段があったら0を出力して終了
for ( $i = 0 ; $i < $M - 1 ; $i++ ) {
    if (($broken_stair[$i + 1] - $broken_stair[$i]) == 1) {
        echo 0;
        exit;
    };
}

#連続して壊れてない階段の数（2以上）が、フィボナッチ数を階差とする数列（初項1）の項になっている（気がする）
#連続して壊れてない階段の数を取り出す
$stairs = [];
$stairs[] = $broken_stair[0];
for ( $i = 0 ; $i < $M - 1 ; $i++ ) {
    $stairs[] = ($broken_stair[$i + 1] - $broken_stair[$i]) - 1;
}
$stairs[] = $N - end($broken_stair);

#連続した部分ごとのパターンの数
$pattern_array = [];
foreach($stairs as $stair) {
    $pattern_array[] = fib($stair) % 1000000007;
}

$ans = 1;
foreach ($pattern_array as $pattern) {
    $ans = ($ans * $pattern) % 1000000007;
}

echo $ans;

function fib($n)
{
    $fib0 = 0;
    $fib1 = 1;
    $ret = 0;
    for($i=0; $i<$n; $i++){
        $ret = $fib1;
        $fib1 = $fib0 + $fib1;
        $fib0 = $ret;
    }
    return $ret;
}

