#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int relation[50010],f[50010];
int n,k,sum=0;
void init();
void merge(int,int,int,int,int);
int find(int);
void work();
int main()
{
	init();
	work();
	return 0;
}
void init()
{
	memset(relation,0,sizeof(relation));
	cin>>n>>k;
	for(int i=1;i<=n;i++) f[i]=i;	
}
void work()
{
	int d,x,y;
	for(int i=1;i<=k;i++)
	{
		cin>>d>>x>>y;
		if(x>n||y>n)
		{
			sum++;
			continue;
		}
		if(n==2 && x==y)
		{
			sum++;
			continue;
		}
		int fx,fy;
		fx=find(x);
		fy=find(y);
		if(fx!=fy) merge(fx,fy,x,y,d);
		else
		if((relation[y]+3-relation[x])%3!=(d-1)) sum++;
	}
	cout<<sum<<endl;
}
int find(int x)
{
	if(f[x]==x) return x;
	int fx;
	fx=find(f[x]);//不能直接f[x]=find(f[x]),更新f[x]后就无法计算x和根的关系了;	
	relation[x]=(relation[x]+relation[f[x]])%3;
	f[x]=fx;//路径压缩
	return f[x]; 
}
void merge(int fx,int fy,int x,int y,int d)
{
	f[fy]=fx;
	relation[fy]=(3-relation[y]+d-1+relation[x])%3;
}
/**************************************************************
	Problem: 2238
	User: admin
	Language: C++
	Result: Accepted
	Time:220 ms
	Memory:2468 kb
****************************************************************/