#5245. [Fjwc2018]欧拉函数

内存限制:512 MiB 时间限制:20 Sec

题目描述

对于正整数 n,定义欧拉函数 φ(n) 为小于等于 n 且与 n 互质的正整数个数。例如
φ(1) = 1, φ(8) = 4。
给定正整数序列 a1, a2, · · · , an,请依次执行 q 个操作,操作有以下三种类型:
 0 i x:修改 ai 的值为 x;
 1 l r:查询 φ(al + al+1 + · · · + ar) 的值,输出这个值对 10^9 + 7 取模的结果;
 2 l r:查询 φ(al × al+1 × · · · × ar) 的值,输出这个值对 10^9 + 7 取模的结果。

输入格式

输入的第一行包含两个正整数 n, q,分别表示序列长度及操作个数。
第二行包含 n 个正整数 a1, a2, · · · , an,表示初始序列。
接下来 q 行,每行三个整数 0 i x 或 1 l r 或 2 l r,表示一个操作。保证
1 ≤ i ≤ n, x ≥ 1, 1 ≤ l ≤ r ≤ n。
n ≤ 50000, q ≤ 100000,Ai及x<=40000操作 0 的个数不超过 20000,所有的 ai、
操作 0 中的 i, x 及操作 1,2 中的 l, r 均在给定的限制下内均匀随机生成

输出格式

对于每次形如 1 l r 或 2 l r 操作,输出一行,表示所求的值对 10^9 + 7 取模的结果。

样例

样例输入


			
5 10
1 3 5 7 9
1 2 4
0 3 3
1 1 4
2 1 4
0 3 4
2 1 3
0 4 5
1 3 5
1 1 5
2 1 5

样例输出


			
8
6
36
4
6
10
144
【样例 1 解释】
初始序列为 1, 3, 5, 7, 9,依次进行的 10 个操作如下:
1. 查询 φ(3 + 5 + 7) = φ(15) = 8,输出 8;
2. 修改 a3 的值为 3,此时的序列为 1, 3, 3, 7, 9;
3. 查询 φ(1 + 3 + 3 + 7) = φ(14) = 6,输出 6;
4. 查询 φ(1 × 3 × 3 × 7) = φ(63) = 36,输出 36;
5. 修改 a3 的值为 4,此时的序列为 1, 3, 4, 7, 9;
6. 查询 φ(1 × 3 × 4) = φ(12) = 4,输出 4;
7. 修改 a4 的值为 5,此时的序列为 1, 3, 4, 5, 9;
8. 查询 φ(4 + 5 + 9) = φ(18) = 6,输出 6;
9. 查询 φ(1 + 3 + 4 + 5 + 9) = φ(22) = 10,输出 10;
10. 查询 φ(1 × 3 × 4 × 5 × 9) = φ(540) = 144,输出 144。

数据范围与提示