#include <iostream>

using namespace std;

#define MAX 2001

int g_nFriend[MAX] = {0};
int g_nEnemy[MAX] = {0};

void InitData(const int& nPeople);
int CalcGroup(const int& nPeople, int nMsg);
void Comb(int x, int y);
int FindRoot(const int& x);

int main()
{
	int nPeople = 0, nMsg = 0;

	cin >>nPeople >>nMsg;
	InitData(nPeople);
	
	cout <<CalcGroup(nPeople, nMsg);
	
	return 0;
}

void InitData(const int& nPeople)
{
	for (int i = 0; i <= nPeople; ++i)
	{
		g_nFriend[i] = g_nEnemy[i] = i;
	}
}

int CalcGroup(const int& nPeople, int nMsg)
{
	char nRela = 0;
	int x = 0, y = 0;

	while (nMsg--)
	{
		cin >>nRela >>x >>y;
		if (nRela == 'F')
		{
			Comb(x, y);
		}
		else
		{
			if (g_nEnemy[x] == x)
			{
				g_nEnemy[x] = y;
			}
			else
			{
				Comb(g_nEnemy[x], y);
			}
			
			if (g_nEnemy[y] == y)
			{
				g_nEnemy[y] = x;
			}
			else
			{
				Comb(g_nEnemy[y], x);
			}
		}
	}
	
	int nGroup = 0;
	for (int i = 1; i <= nPeople; ++i)
	{
		if (g_nFriend[i] == i) ++nGroup;
	}
	
	return nGroup;
}

void Comb(int x, int y)
{
	x = FindRoot(x);
	y = FindRoot(y);
	g_nFriend[x] = y;
}

int FindRoot(const int& x)
{
	if (g_nFriend[x] != x)
	{
		g_nFriend[x] = FindRoot(g_nFriend[x]);
	}

	return g_nFriend[x];
}
/**************************************************************
	Problem: 2243
	User: admin
	Language: C++
	Result: Accepted
	Time:61 ms
	Memory:2088 kb
****************************************************************/