#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
set<int> adj[N];
vector<pair<int, int>> edge;
int par[N], sz[N];
bool vis[N];
int fp(int u){
return par[u] = (u == par[u] ? u : fp(par[u]));
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
cin >> n >> m;
iota(par, par+n+1, 0);
for(int i = 1; i <= n; ++i) sz[i] = 1;
while(m--){
int u, v;
char c;
cin >> u >> v >> c;
if(c == 'A'){
edge.push_back({u, v});
}else{
int pu = fp(u), pv = fp(v);
if(pu == pv) continue;
if(sz[pu] > sz[pv]) swap(pu, pv);
sz[pv] += sz[pu];
par[pu] = pv;
}
}
for(auto [u, v] : edge){
u = fp(u), v = fp(v);
if(u == v) continue;
adj[u].insert(v);
adj[v].insert(u);
}
int res = 0;
for(int i = 1; i <= n; ++i){
int p = fp(i);
if(vis[p]) continue;
vis[p] = 1;
int sum = sz[p];
// if(i == 1) cout << sum << '\n';
for(auto v : adj[p]){
// if(i == 1) cout << sz[fp(v)] << '\n';
sum += sz[fp(v)];
}
if(sum == n)
// cout << "dbg : " << i << ' ' << p << '\n';
if(sum == n) res += sz[p];
}
cout << res << '\n';
}