编程题
这是我自己的发明
### 题目描述
您正在打 galgame,然后突然家长进来了,于是您假装在写数据结构题:
给一个树,$n$ 个点,有点权,初始根是 1。
$m$ 个操作,种类如下:
`1 x` 将树根换为 $x$。
`2 x y` 给出两个点 $x,y$,从 $x$ 的子树中选每一个点,$y$ 的子树中选每一个点,求点权相等的情况数。
### 输入描述
第一行两个数表示 $n,m$。
第二行 $n$ 个数,表示每个点的点权 $a_i$。
之后 $n-1$ 行 , 每行两个数 $x,y$ , 表示一条边。
之后 $m$ 行,每行表示一个操作。
其中,$1\le n \le 10^5$,$1 \le m \le 5\times 10^5$ , $1 \le a_i \le 10^9$。
### 输出描述
对于每个询问,输出一个数表示答案。
### 输入输出样例
#### 示例 1
>输入
```txt
5 5
1 2 3 4 5
1 2
1 3
3 4
3 5
2 4 5
2 1 5
2 3 5
1 5
2 4 5
```
>输出
```txt
0
1
1
1
```