#include<stdio.h>

int n,k,D,sum=0;
int a[50005];
int kind[50005];

int find(int x)
{
	if(x==a[x]) return x;
	int t=a[x];
	a[x]=find(t);
	kind[x]=(kind[x]+kind[t])%3;
	return a[x];
}

void zuhe(int x,int y,int d)
{
	int r1=find(x);
	int r2=find(y);
	a[r1]=r2;//合并两个节点 
	kind[r1]=(3-kind[x]+d+kind[y])%3;
}

int main()
{
	scanf("%d%d",&n,&k);
	
	for(int i=0;i<=n;++i)
	{
		a[i]=i;
		kind[i]=0;
	}
	
	for(int i=0;i<k;++i)
	{
		int x,y;
		scanf("%d%d%d",&D,&x,&y);
		
		if(x>n||y>n||(D==2&&x==y)) sum++;
		else
		{
			int r1=find(x);
			int r2=find(y);
			
			if(r1==r2)
			{
				if((kind[x]-kind[y]+3)%3!=D-1)
				{
					sum++;
				}
			}
			else
			{
				zuhe(x,y,D-1);
			}
		}
	}
	printf("%d",sum);
	return 0;
}

/**************************************************************
	Problem: 2238
	User: admin
	Language: C
	Result: Accepted
	Time:147 ms
	Memory:1536 kb
****************************************************************/