#include <algorithm>
#include <iomanip>
#include <iostream>
#include <vector>
#include <set>
#include <numeric>
#include <map>
#include <unordered_map>
using namespace std;
#define all(a) a.begin(), a.end()
#define ll long long
#define fo(i,n) for (long long i = 0; i < n; i++)

int main()
{
    ll n,q,op,a,b;
    cin >> n >> q;
    vector<vector<ll>> nest(n,vector<ll>(1));
    map<ll,ll> locations;
    fo(j,n)
    {
        nest[j][0] = j;
        locations[j] = j;
    }
    for (int j = 0; j < q; j++)
    {
        cin >> op;
        if (op == 1)
        {
            cin >> a >> b;
            ll spot = locations[a-1];
            nest[spot].erase(find(all(nest[spot]),a-1));
            nest[b-1].push_back(a-1);
            locations[a-1] = b-1;
        }
        if (op == 2)
        {
            cin >> a >> b;
            for (ll item : nest[a-1])
            {
            	locations[item] = b-1;
            }
            for (ll item : nest[b-1])
            {
            	locations[item] = a-1;
            }
            nest[a-1].swap(nest[b-1]);
        }
        if (op == 3)
        {
            cin >> a;
            cout << locations[a-1]+1 << '\n';
        }
    }

}