package main
import (
"bufio"
"fmt"
"os"
)
const MOD int64 = 1000000007
func main() {
in := bufio.NewReaderSize(os.Stdin, 1<<20)
out := bufio.NewWriterSize(os.Stdout, 1<<20)
defer out.Flush()
var n, m int
fmt.Fscan(in, &n, &m)
s := make([]int, n+1)
for i := 0; i < n; i++ {
fmt.Fscan(in, &s[i])
}
s[n] = m + 1
dp := make([][]int64, m+2)
for i := range dp {
dp[i] = make([]int64, m+2)
}
for d := 0; d <= m; d++ {
dp[d][0] = int64(d + 1)
}
inv2 := (MOD + 1) / 2
for b := 1; b <= m-1; b++ {
dp[0][b] = (1 + dp[1][b-1]) % MOD
dp[0][b] = dp[0][b] * inv2 % MOD
maxD := m - 1 - b
for d := 1; d <= maxD; d++ {
dp[d][b] = (1 + dp[d-1][b] + dp[d+1][b-1]) % MOD
dp[d][b] = dp[d][b] * inv2 % MOD
}
}
var ans int64
for i := 0; i < n; i++ {
d := s[i+1] - s[i] - 1
b := m + 1 - s[i+1]
ans += dp[d][b]
if ans >= MOD {
ans -= MOD
}
}
fmt.Fprint(out, ans%MOD)
}