#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1115;
const int MAXM = 5115;
int N, M, cnt = 0;
int dl[MAXN];
struct Dosu {
int par[MAXN], sz[MAXN], cnt = 0;
void INIT() {
for (int i = 1; i <= N; i++) {
par[i] = i;
sz[i] = 1;
}
}
int find_set(int u) {
return (par[u] == u ? u : par[u] = find_set(par[u]));
}
void union_set(int u, int v) {
u = find_set(u), v = find_set(v);
if (sz[u] < sz[v]) swap(u, v);
par[v] = par[u];
sz[u] += sz[v];
}
int solve() {
set<int> tmp;
for (int i = 1; i <= N; i++) tmp.insert(find_set(i));
return (int) tmp.size();
}
} DSU;
main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M;
DSU.INIT();
while (M--) {
char c;
int a, b;
cin >> c >> a >> b;
if (c == 'F') DSU.union_set(a, b);
else {
int tmp = DSU.find_set(a);
if (dl[a] > 0) DSU.union_set(dl[a], b);
if (dl[b] > 0) DSU.union_set(a, dl[b]);
dl[a] = b;
dl[b] = a;
}
}
cout << DSU.solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDExMTU7CmNvbnN0IGludCBNQVhNID0gNTExNTsKCgppbnQgTiwgTSwgY250ID0gMDsKaW50IGRsW01BWE5dOwoKc3RydWN0IERvc3UgewogICAgaW50IHBhcltNQVhOXSwgc3pbTUFYTl0sIGNudCA9IDA7CiAgICB2b2lkIElOSVQoKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gTjsgaSsrKSB7CiAgICAgICAgICAgIHBhcltpXSA9IGk7CiAgICAgICAgICAgIHN6W2ldID0gMTsKICAgICAgICB9CiAgICB9CgogICAgaW50IGZpbmRfc2V0KGludCB1KSB7CiAgICAgICAgcmV0dXJuIChwYXJbdV0gPT0gdSA/IHUgOiBwYXJbdV0gPSBmaW5kX3NldChwYXJbdV0pKTsKICAgIH0KCiAgICB2b2lkIHVuaW9uX3NldChpbnQgdSwgaW50IHYpIHsKICAgICAgICB1ID0gZmluZF9zZXQodSksIHYgPSBmaW5kX3NldCh2KTsKICAgICAgICBpZiAoc3pbdV0gPCBzelt2XSkgc3dhcCh1LCB2KTsKICAgICAgICBwYXJbdl0gPSBwYXJbdV07CiAgICAgICAgc3pbdV0gKz0gc3pbdl07CiAgICB9CgogICAgaW50IHNvbHZlKCkgewogICAgICAgIHNldDxpbnQ+IHRtcDsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBOOyBpKyspIHRtcC5pbnNlcnQoZmluZF9zZXQoaSkpOwogICAgICAgIHJldHVybiAoaW50KSB0bXAuc2l6ZSgpOwogICAgfQp9IERTVTsKCm1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwogICAgY2luLnRpZSgwKTsKCiAgICBjaW4gPj4gTiA+PiBNOwoKICAgIERTVS5JTklUKCk7CgogICAgd2hpbGUgKE0tLSkgewogICAgICAgIGNoYXIgYzsKICAgICAgICBpbnQgYSwgYjsKICAgICAgICBjaW4gPj4gYyA+PiBhID4+IGI7CiAgICAgICAgaWYgKGMgPT0gJ0YnKSBEU1UudW5pb25fc2V0KGEsIGIpOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBpbnQgdG1wID0gRFNVLmZpbmRfc2V0KGEpOwogICAgICAgICAgICBpZiAoZGxbYV0gPiAwKSBEU1UudW5pb25fc2V0KGRsW2FdLCBiKTsKICAgICAgICAgICAgaWYgKGRsW2JdID4gMCkgRFNVLnVuaW9uX3NldChhLCBkbFtiXSk7CiAgICAgICAgICAgIGRsW2FdID0gYjsKICAgICAgICAgICAgZGxbYl0gPSBhOwogICAgICAgIH0KICAgIH0KCgogICAgY291dCA8PCBEU1Uuc29sdmUoKTsKfQo=