错排(Derangement)是指一个 $1, 2, \dots, n$ 的排列 $p$,满足对于所有 $1 \le i \le n$,都有 $p_i \neq i$。
序列 $a_1, a_2, \dots, a_n$ 的偏移量为 $k$ ($1 \le k \le n$) 的旋转定义为序列 $a_k, a_{k+1}, \dots, a_n, a_1, a_2, \dots, a_{k-1}$。一个长度为 $n$ 的序列最多有 $n$ 个不同的旋转。
给定一个错排 $D$,令 $f(D)$ 表示 $D$ 的所有旋转中,同时也是错排的旋转个数。例如,$f([2, 1]) = 1$,$f([3, 1, 2]) = 2$。
给定 $n$ 和一个质数 $p$,计算 $1, 2, \dots, n$ 的错排 $D$ 中满足 $f(D) = n - 2$ 的个数,结果对 $p$ 取模。
输入格式
输入包含一行,包含两个整数 $n$ ($3 \le n \le 10^6$) 和 $p$ ($10^8 \le p \le 10^9 + 7$),其中 $n$ 是排列的大小,$p$ 是一个质数。
输出格式
输出一个整数,表示满足 $f(D) = n - 2$ 的大小为 $n$ 的错排 $D$ 的个数,对 $p$ 取模。
样例
样例输入 1
3 1000000007
样例输出 1
0
样例输入 2
6 999999937
样例输出 2
20