rausen loves cakes

Accepts: 36
Submissions: 341
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
rausen喜欢吃蛋糕。某天,他买了$n$个蛋糕,每个蛋糕都有一个颜色,用$\left[1,1000000 \right]$中的整数来表示。rausen将它们从左到右排成一行,然后准备开始吃。

在吃之前,rausen想对蛋糕进行$q$个操作。

某些时刻,rausen会把所有颜色为$x$的蛋糕替换成颜色为$y$的蛋糕。

另一些时刻,rausen会计算一段区间$\left[x,y \right]$内颜色的段数,所谓一段颜色,就是指极长的只有一种颜色的区间。例如1 4 4 1 1即为3段颜色。

然而,rausen发现,他并不会统计区间内的颜色段数,无助的rausen伤心地哭了起来(误)。而你为了安慰他,决定帮他解决这个问题。
输入描述
输入包含多组数据。第一行有一个整数$T$,表示测试数据的组数,对于每组数据:

第一行输入2个整数$n$,$q$分别表示蛋糕的数目和操作的数目。

接下来一行$n$个正整数,第$i$个正整数${a}_{i}$表示第$i$个蛋糕的颜色。

接下来$q$行,每行3个整数$op\left(1\leq op\leq 2 \right)$,$x$,$y$,描述一个操作
对于$op=1$,表示rausen进行替换操作,将颜色为$x$的蛋糕替换成颜色为$y$的蛋糕,$x$、$y$满足$\left(1\leq x,y\leq 1000000 \right)$,请注意$x$可能等于$y$。

对于$op=2$,表示rausen进行计数操作,此时你需要输出区间$\left[x,y \right]$内颜色的段数,$x$、$y$满足$\left(1\leq x\leq y\leq n \right)$

$\left(1\leq T\leq 5 \right)$,$\left(1\leq n\leq {10}^{5} \right)$,$\left(1\leq q\leq {10}^{5} \right)$
输出描述
对于每组测试数据的每一个计数操作,单独输出一行表示答案。
输入样例
1
5 3
1 4 4 10 1
2 1 5
1 4 10
2 3 5
输出样例
4
2