Start: Oct, 13, 2020 11:00:00
ttttoi
End: Oct, 13, 2020 12:25:00
Time elapsed:
Time remaining:

最小生成树 1197

Time Limit:  1 Sec    Memory Limit:   256 MB
Submission:1     AC:1     Score:10


Description

蒜头君有一个 n 个点(点的编号为 1 ~ n 的完全图

对于任意两点 i,j ,这两点之间的边长为 lcm(i + 1,j + 1)

蒜头君最近刚学习了 Kruskal 算法,他自己计算出了这个最小生成树,但是他希望你帮他验证一下他的结果是否正确

所以请你计算一下这个图的最小生成树的边权值总和是多少

当然因为数据过大,所以将结果对 MOD 取模

注:
1. 完全图:即任意两个点之间都存在一条边

2. lcm 表示最小公倍数

3. 生成树:一个连通图的生成树是指一个连通子图,它含有图中全部 n 个顶点,但只有足以构成一棵树的 n-1 条边。 
一颗有 n 个顶点的生成树有且仅有 n-1 条边,如果生成树中再添加一条边,则必定成环。

4. 最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树。 

Input

输入第一行包含一个整数 T 表示共有 T 组测试数据
接下来 T 行,每行包含两个整数 n,MOD 含义如题

Output

对于每组测试数据,输出一行包含一个整数,表示对 MOD 取模以后的答案

Samples

input:
2 3 99999773 100 99999773
output:
10 6307

Hint

对于 $40\%$ 的数据,$1 <= T <= 5,n <= 10^4$

对于 $100\%$ 的数据,$1 <= T <= 50,n <= 10^7, 10^8 <= MOD <= 10^10$,且保证 $MOD$ 是质数