#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
****************************************************************/