杰哥的集合
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

这不刚过完儿童节,杰哥陪他儿子小杰哥去迪士尼玩了一天,回家后小杰哥向杰哥提出了一个问题让杰哥百思不得其解。于是杰哥向聪明的你请求帮助,问题如下:

开始时有 n 数,第 i 个数表示为 a_i,每个数字属于一个独立的集合。

现有两种操作,共操作 m 次:

操作1:给你两个数表示合并第 x 个数和第 y 个数所在的两个集合

操作2:给你一个数 x,表示求第 x 个数所在的集合内出现次数最多的数(若有多个,则取最小的数)

你能否帮助杰哥解决难题?

输入描述:

第一行两个正整数 n,m  ,表示初始集合个数和操作次数。

第二行 n 个正整数,第 i 个数代表 a_i

接下来有 m 行,每行分别表示一次操作。用若干个整数表示不同类型的操作,具体格式如下:

操作1: 1 x y 
含义:给两个数,表示合并第 x 个数和第 y 个数所在的两个集合

操作2: 2 x 
含义:给一个数 x,表示求第 x 个数所在的集合内出现次数最多的数(若有多个,则取最小的数)

输出描述:

如果有 t 个操作2,那么应该输出 t 行,其中第 i 行表示第 i 次询问的答案。
示例1

输入

复制
5 3
1 2 2 2 4
1 2 3
1 3 4
2 2

输出

复制
2

说明

第一次操作,合并 a_2,a_3 所属集合,之后所有的集合为:\lbrace a_1 \rbrace \lbrace a_2,a_3\rbrace \lbrace a_4\rbrace \lbrace a_5\rbrace

第二次操作,合并 a_3,a_4 所属集合, 之后所有的集合为 \lbrace a_1\rbrace \lbrace a_2,a_3,a_4 \rbrace \lbrace a_5 \rbrace

第三次操作,查询 a_2 所属集合中出现次数最多的数,a_2 所属的集合为 \lbrace a_2,a_3,a_4\rbrace,其中 2 出现的次数最多,为 3 次,则答案为 2