{-# LANGUAGE ScopedTypeVariables #-}

import qualified Data.Vector.Unboxed.Mutable as VUM
import qualified Data.ByteString.Char8 as B
import Control.Monad
import Data.Maybe

main = do
    [n,m] <- map read . words <$> getLine :: IO [Int]
    (ngs :: VUM.IOVector Bool) <- VUM.replicate (10^5+100) False
    (dp :: VUM.IOVector Int) <- VUM.replicate (10^5+100) 0

    replicateM_ m $ do
        i <- fst . fromJust . B.readInt <$> B.getLine
        VUM.modify ngs (||True) i

    VUM.write dp 0 1

    forM_ [0..10^5] $ \i -> do
        ng <- VUM.read ngs i
        curr <- VUM.read dp i
        unless ng $
            forM_ [i+1,i+2] $ \j -> do
                ng' <- VUM.read ngs j 
                dist <- VUM.read dp j
                unless ng' $ do
                    VUM.write dp j ((curr + dist) `mod` (10^9+7))

    VUM.read dp n >>= print