编程题
### 问题描述
一座长度为 $n$ 的山脉 $h$ 可分为从左到右的 $n$ 段,每段有一个独一无二的高度 $h_i$,其中 $h_i$ 是 $1$ 到 $n$ 之间的正整数。
如果一段山脉比所有与它相邻的山脉都高,则这段山脉是一个山峰。位于边缘的山脉只有一段相邻的山脉,其他都有两段(即左边和右边)。
类似地,如果一段山脉比所有它相邻的山脉都低,则这段山脉是一个山谷。
小蓝打算在山谷上修建房屋 $A$,在山峰上修建房屋 $B$。小蓝希望这 $n$ 段山脉每段都可以修建房屋 $A$ 或房屋 $B$ 的其中之一,只有满足这个条件小蓝才会喜欢整座山脉。
现在你希望知道,长度为 $n$ 的被小蓝喜欢的山脉有多少种。由于答案较大,输出对 $p$ 取模的结果。
### 输入格式
输入包含两个整数 $n,p$,含义见上文。
### 输出格式
输出一个整数,表示对 $p$ 取余之后的结果。
### 样例输入
```
4 7
```
### 样例输出
```
3
```
### 评测数据规模
对于所有评测数据,$3\leq{n}\leq{4200},p\leq{10^9 }$。