/*
Copyright 2013,2016 Marek "p2004a" Rusinowski
Disjoint-set data structure(Find&Union)
*/
#include <cstdio>
#include <vector>
#include <numeric>
using namespace std;
class FindUnion {
vector<int> root, rank;
public:
FindUnion(int n) : root(n), rank(n) {
iota(root.begin(), root.end(), 0);
}
int find_set(int v) {
if (root[v] == v) return v;
root[v] = find_set(root[v]);
return root[v];
}
void union_sets(int v, int u) {
v = find_set(v);
u = find_set(u);
if (rank[v] < rank[u]) {
root[v] = u;
} else if (rank[v] > rank[u]) {
root[u] = v;
} else {
root[v] = u;
++rank[v];
}
}
};
int main() {
int n, m;
scanf("%d %d\n", &n, &m);
FindUnion f(n);
int a, b;
char c;
for (int i = 0; i < m; ++i) {
scanf("%c", &c);
switch(c) {
case 'f': {
scanf("%d\n", &a);
printf("%d\n", f.find_set(a - 1) + 1);
break;
}
case 'u': {
scanf("%d %d\n", &a, &b);
f.union_sets(a - 1, b - 1);
break;
}
}
}
return 0;
}
LyoKICBDb3B5cmlnaHQgMjAxMywyMDE2IE1hcmVrICJwMjAwNGEiIFJ1c2lub3dza2kKICBEaXNqb2ludC1zZXQgZGF0YSBzdHJ1Y3R1cmUoRmluZCZVbmlvbikKKi8KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG51bWVyaWM+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRmluZFVuaW9uIHsKICB2ZWN0b3I8aW50PiByb290LCByYW5rOwoKIHB1YmxpYzoKICBGaW5kVW5pb24oaW50IG4pIDogcm9vdChuKSwgcmFuayhuKSB7CiAgCWlvdGEocm9vdC5iZWdpbigpLCByb290LmVuZCgpLCAwKTsKICB9CgogIGludCBmaW5kX3NldChpbnQgdikgewogICAgaWYgKHJvb3Rbdl0gPT0gdikgcmV0dXJuIHY7CiAgICByb290W3ZdID0gZmluZF9zZXQocm9vdFt2XSk7CiAgICByZXR1cm4gcm9vdFt2XTsKICB9CgogIHZvaWQgdW5pb25fc2V0cyhpbnQgdiwgaW50IHUpIHsKICAgIHYgPSBmaW5kX3NldCh2KTsKICAgIHUgPSBmaW5kX3NldCh1KTsKICAgIGlmIChyYW5rW3ZdIDwgcmFua1t1XSkgewogICAgICByb290W3ZdID0gdTsKICAgIH0gZWxzZSBpZiAocmFua1t2XSA+IHJhbmtbdV0pIHsKICAgICAgcm9vdFt1XSA9IHY7CiAgICB9IGVsc2UgewogICAgICByb290W3ZdID0gdTsKICAgICAgKytyYW5rW3ZdOwogICAgfQogIH0KfTsKCmludCBtYWluKCkgewogIGludCBuLCBtOwogIHNjYW5mKCIlZCAlZFxuIiwgJm4sICZtKTsKICBGaW5kVW5pb24gZihuKTsKICBpbnQgYSwgYjsKICBjaGFyIGM7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyArK2kpIHsKICAgIHNjYW5mKCIlYyIsICZjKTsKICAgIHN3aXRjaChjKSB7CiAgICAgIGNhc2UgJ2YnOiB7CiAgICAgICAgc2NhbmYoIiVkXG4iLCAmYSk7CiAgICAgICAgcHJpbnRmKCIlZFxuIiwgZi5maW5kX3NldChhIC0gMSkgKyAxKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBjYXNlICd1JzogewogICAgICAgIHNjYW5mKCIlZCAlZFxuIiwgJmEsICZiKTsKICAgICAgICBmLnVuaW9uX3NldHMoYSAtIDEsIGIgLSAxKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gMDsKfQo=