#1 #3 #9 AC 其余WA
#include<iostream>
#include<cstdio>
using namespace std;
int father[50001],dist[50001];
int n,k,ans=0,z,x,y;
void init(){
for(int i=0;i<=50000;i++){
father[i]=i;
dist[i]=0;
}
return;
}
int find(int x){
if(father[x]==x){
return x;
}
int old=father[x];
father[x]=find(father[x]);
dist[x]=(dist[x]+dist[old]);
return father[x];
}
void merge(int x,int y,int w){
int fx=find(x);
int fy=find(y);
if(fx!=fy){
dist[fx]=(dist[y]+w-dist[x]+3)%3;
father[fx]=fy;
}
return;
}
int main(){
init();
cin>>n>>k;
for(int i=1;i<=k;i++){
cin>>z>>x>>y;
if(x>n||y>n){
ans++;
continue;
}
if(z==2&&x==y){
ans++;
continue;
}
if(z==1){
if(find(x)==find(y)&&dist[x]!=dist[y]){
ans++;
continue;
}else if(find(x)!=find(y)){
merge(x,y,0);
}
}else{
if(x==y){
ans++;
continue;
}
if(find(x)==find(y)){
int rel=(dist[x]-dist[y]+3)%3;
if(rel!=1){
ans++;
continue;
}
}else{
merge(x,y,1);
}
}
}
cout<<ans<<endl;
return 0;
}