#include<iostream>
#include<vector>
#include<iomanip>
#include<set>
#include<algorithm>
#include<unordered_map>
#define ll long long
#define io {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);}
#define rt int t;cin>>t;while(t--)
#define r1 int t=1;while(t--)
#define mp make_pair
#define endl '\n'
using namespace std;
unordered_map<int,int>m[200010];
int f[200010];
int find(int x) {
	return x==f[x]?x:f[x]=find(f[x]);
}
void merge(int a,int b) {
	int lx=find(a);
	int rx=find(b);
	if(lx!=rx) {
		if(m[lx].size()>m[rx].size()) {
			f[rx]=lx;
			for(auto i:m[rx]) {
				m[lx][i.first]+=i.second;
			}
		} else {
			f[lx]=rx;
			for(auto i:m[lx]) {
				m[rx][i.first]+=i.second;
			}
		}
	}
}
int main() {
	io;
	r1 {
		int n,q;
		cin>>n>>q;
		for(int i=1; i<=n; i++) {
			int x;
			cin>>x;
			m[i][x]++;
			f[i]=i;
		}
		while(q--) {
			int opt;
			cin>>opt;
			if(opt==1) {
				int a,b;
				cin>>a>>b;
				merge(a,b);
			} else if(opt==2) {
				int x,y;
				cin>>x>>y;
				int k=find(x);
				cout<<m[k][y]<<endl;
			}
		}
	}
	return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main(){
  int n,x,num = 0;cin>>n>>x;
  vector<int>vec(n);
  for(int i = 0; i < n; i++){
    cin >> vec.at(i);
    if(vec.at(i) == x){
      num++;
    }
  }
  int j = 0;
  for(int i = 0; i < n; i++){
    if(vec.at(i) != x){
      cout << vec.at(i) << " ";
    }
  }
  return 0;
}