AT_agc077_d [AGC077D] Range Replace 2

Description

正整数 $ N $ と素数 $ P $ が与えられます. すべての要素が $ 0 $ である長さ $ N $ の数列 $ A=(A_1,A_2,\ldots,A_N) $ があります. あなたは以下の操作を $ 0 $ 回以上好きな回数繰り返すことができます. - 整数の組 $ (l, r)\ (1\leq l\leq r\leq N) $ を選ぶ. $ A_l,A_{l+1},\ldots,A_r $ を全て $ \dfrac{r(r-1)}{2}+l $ で置き換える. 操作を繰り返すことで最終的に得られる $ A $ としてあり得るものの個数を $ P $ で割った余りを求めてください.

Input Format

入力は以下の形式で標準入力から与えられる. > $ N $ $ P $

Output Format

答えを出力せよ.

Explanation/Hint

### Sample Explanation 1 得られる $ A $ は $ (0),(1) $ の $ 2 $ 通りです. ### Sample Explanation 2 得られる $ A $ は $ (0,0),(0,3),(1,0),(1,2),(1,3),(2,2),(2,3) $ の $ 7 $ 通りです. ### Constraints - $ 1\leq N\leq 5000 $ - $ P $ は $ 10^8\lt P\lt 10^9 $ を満たす素数 - 入力される数値は全て整数