#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
int w=0,x=0;char ch ;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
return w?-x:x;
}
int n,m;
int a[5000005];
int c[5000005];
int siz[5000005];
int head[5000005],to[5000005];
int e[5000005];
int idx;
int cnt;
void add(int place,int k){
e[idx]=k;
to[idx]=head[place];
head[place]=idx++;
siz[place]++;
}
void update(int &l,int &r){
if(l==r) return ;
if(siz[l]>siz[r]) swap(siz[l],siz[r]);
for(int i=head[l];~i;i=to[i]){
int now=e[i];
cnt-=(a[now-1]==r)+(a[now+1]==r);
}
for(int i=head[l];~i;i=to[i]){
int now=e[i];
a[now]=r;
if(to[i]==-1){
to[i]=head[r],head[r]=head[l];
break;
}
}
head[l]=-1;
siz[r]+=siz[l];
siz[l]=0;
}
int g,h,opt;
signed main(){
memset(head,-1,sizeof(head));
n=read(),m=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
for(int i=1;i<=n;i++){
if(a[i]!=a[i-1]) cnt++;
add(a[i],i);
}
for(int i=0;i<1e6+5;i++){
c[i]=i;
}
for(int i=1;i<=m;i++){
opt=read();
if(opt==2) cout<<cnt<<endl;
else{
g=read(),h=read();
update(c[g],c[h]);
}
}
return 0;
}