牵一半
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

这生命 无常又孤单
你的存在 是我唯一依赖
失去的梦 伤过的心
该怎么去 补完
有些困惑 这一生 我们都不知道答案
我错过太多美满
留过太多遗憾
而在这一次 我想要抓住
那份期盼
————《牵一半》阿良良木健(侵删)

定义函数f(x,p)(p为质数)为,当x不是p的倍数时,f(x,p)x 在模 p意义下的乘法逆元(即),xp的倍数时

阿良良木健现在有一个序列长度为n的序列a_i,和m个操作。

操作有两种:

a_x更改为y

,求max(f(a_i,p))其中

保证数据随机

随机方式如下:

a_i,x,y中的正整数中 等概率随机生成

opt(指操作序号)中随机生成

l,r中的正整数中 等概率随机生成 生成后若 则交换 l,r

p的质数中 等概率随机生成一个

输入描述:

第一行,两个正整数

后面一行,每行 n 个数,表示序列 a

后面 m 行,每行三个或四个数,表示一次操作

输出描述:

对于每个操作2,输出一行一个非负整数,表示这一询问的答案。
示例1

输入

复制
10 10
5 6 2 8 9 8 7 8 1 3
2 3 8 5
1 2 6
2 7 8 7
2 7 8 2
1 3 9
2 5 8 3
1 2 7
1 9 8
2 1 4 7
2 4 6 7

输出

复制
4
1
1
2
4
4