#include <iostream>
#include <vector>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll n, q;
cin >> n >> q;
vector<ll> pigeon_loc(n); // For each pigeon, the current logical nest it is in
vector<ll> nest_map(n); // For each logical nest, the physical nest it points to
vector<ll> reverse_map(n); // For each physical nest, the logical nest it points to
for (ll i = 0; i < n; ++i) {
pigeon_loc[i] = i;
nest_map[i] = i;
reverse_map[i] = i;
}
while (q--) {
ll op, a, b;
cin >> op;
if (op == 1) {
cin >> a >> b;
a--; b--;
// Move pigeon a from current logical nest to logical nest b
pigeon_loc[a] = b;
} else if (op == 2) {
cin >> a >> b;
a--; b--;
// Swap logical nests a and b by swapping nest_map[a] and nest_map[b]
swap(nest_map[a], nest_map[b]);
// Update reverse_map to reflect the new mapping
reverse_map[nest_map[a]] = a;
reverse_map[nest_map[b]] = b;
} else if (op == 3) {
cin >> a;
a--;
// The current physical nest of pigeon a is nest_map[pigeon_loc[a]]
cout << nest_map[pigeon_loc[a]] + 1 << '\n';
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKCiAgICBsbCBuLCBxOwogICAgY2luID4+IG4gPj4gcTsKCiAgICB2ZWN0b3I8bGw+IHBpZ2Vvbl9sb2Mobik7ICAvLyBGb3IgZWFjaCBwaWdlb24sIHRoZSBjdXJyZW50IGxvZ2ljYWwgbmVzdCBpdCBpcyBpbgogICAgdmVjdG9yPGxsPiBuZXN0X21hcChuKTsgICAvLyBGb3IgZWFjaCBsb2dpY2FsIG5lc3QsIHRoZSBwaHlzaWNhbCBuZXN0IGl0IHBvaW50cyB0bwogICAgdmVjdG9yPGxsPiByZXZlcnNlX21hcChuKTsgLy8gRm9yIGVhY2ggcGh5c2ljYWwgbmVzdCwgdGhlIGxvZ2ljYWwgbmVzdCBpdCBwb2ludHMgdG8KCiAgICBmb3IgKGxsIGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgcGlnZW9uX2xvY1tpXSA9IGk7CiAgICAgICAgbmVzdF9tYXBbaV0gPSBpOwogICAgICAgIHJldmVyc2VfbWFwW2ldID0gaTsKICAgIH0KCiAgICB3aGlsZSAocS0tKSB7CiAgICAgICAgbGwgb3AsIGEsIGI7CiAgICAgICAgY2luID4+IG9wOwoKICAgICAgICBpZiAob3AgPT0gMSkgewogICAgICAgICAgICBjaW4gPj4gYSA+PiBiOwogICAgICAgICAgICBhLS07IGItLTsKICAgICAgICAgICAgLy8gTW92ZSBwaWdlb24gYSBmcm9tIGN1cnJlbnQgbG9naWNhbCBuZXN0IHRvIGxvZ2ljYWwgbmVzdCBiCiAgICAgICAgICAgIHBpZ2Vvbl9sb2NbYV0gPSBiOwogICAgICAgIH0gZWxzZSBpZiAob3AgPT0gMikgewogICAgICAgICAgICBjaW4gPj4gYSA+PiBiOwogICAgICAgICAgICBhLS07IGItLTsKICAgICAgICAgICAgLy8gU3dhcCBsb2dpY2FsIG5lc3RzIGEgYW5kIGIgYnkgc3dhcHBpbmcgbmVzdF9tYXBbYV0gYW5kIG5lc3RfbWFwW2JdCiAgICAgICAgICAgIHN3YXAobmVzdF9tYXBbYV0sIG5lc3RfbWFwW2JdKTsKICAgICAgICAgICAgLy8gVXBkYXRlIHJldmVyc2VfbWFwIHRvIHJlZmxlY3QgdGhlIG5ldyBtYXBwaW5nCiAgICAgICAgICAgIHJldmVyc2VfbWFwW25lc3RfbWFwW2FdXSA9IGE7CiAgICAgICAgICAgIHJldmVyc2VfbWFwW25lc3RfbWFwW2JdXSA9IGI7CiAgICAgICAgfSBlbHNlIGlmIChvcCA9PSAzKSB7CiAgICAgICAgICAgIGNpbiA+PiBhOwogICAgICAgICAgICBhLS07CiAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IHBoeXNpY2FsIG5lc3Qgb2YgcGlnZW9uIGEgaXMgbmVzdF9tYXBbcGlnZW9uX2xvY1thXV0KICAgICAgICAgICAgY291dCA8PCBuZXN0X21hcFtwaWdlb25fbG9jW2FdXSArIDEgPDwgJ1xuJzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=