U507153 互质覆盖

题目背景

蒟蒻 xym 在同一个套路上栽坑两次了……

题目描述

同 [P7800 \[COCI2015-2016#6\] PAROVI](https://www.luogu.com.cn/problem/P7800),但模数、数据范围略有不同。 $1 \sim n$ 数轴,你可以使用若干条线段 $[l, r]$ 来覆盖,其中要满足 $\gcd(l, r) = 1$。问你能够完全覆盖数轴的方案数,对 $M$ 取模。

输入格式

一行两个整数 $n, M$。

输出格式

一行一个整数,表示对 $M$ 取模后的方案数。

说明/提示

对于 $10\%$ 的数据,同 [P7800 \[COCI2015-2016#6\] PAROVI](https://www.luogu.com.cn/problem/P7800),$n \leq 20$,$M = 10^9$。 对于 $100\%$ 的数据,$2 \leq n \leq 10^4$,$2 \leq M \leq 10^9+7$。**不保证 $M$ 为质数**。数据有一定梯度。 时空已经开到 std 两倍以上。请确保你算法的时间复杂度不超过 $\mathcal{O}(n^2)$,如果你有更优的解法、水过了这道题,欢迎来嘲讽我。 [标程、Gen、题解](https://www.cnblogs.com/XuYueming/p/18559166)。