#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int N=5e4+5;
int n,f[N],k,ans=0;
int find(int x){
if(f[x]==x) return f[x];
return f[x]=find(f[x]);
}
int sz(int x){
x-=n;
if(x==1) return n+2;
if(x==2) return n+3;
return n+1;
}
bool valid(int x,int y){
if(x==y) return 0;
if(x==1&&y==3) return 0;
if(x==2&&y==1) return 0;
if(x==3&&y==2) return 0;
return 1;
}
void debug(){
cout<<"! "<<ans<<endl;
for(int i=1;i<=5;i++) cout<<f[i]<<" ";
cout<<endl;
}
int main(){
freopen("in.txt","r",stdin);
scanf("%d%d",&n,&k);
for(int i=1;i<=n+3;i++) f[i]=i;
for(int i=1;i<=k;i++){
int x,y,c;
scanf("%d%d%d",&c,&x,&y);
if(x>n||y>n) ans++;
else if(c==1){
int fx=find(x),fy=find(y);
if(fx!=fy&&fx>n&&fy>n) ans++;
else f[fy]=fx;
}else {
if(x==y){
ans++;
continue;
}
int fx=find(x),fy=find(y);
if(fx>n&&fy>n) {
fx-=n,fy-=n;
if(!valid(fx,fy)) ans++;
}else if(fx>n) {
f[fy]=sz(fx);
}
else if(fy>n) {
f[fx]=sz(fy);
}
else f[fx]=n+1,f[fy]=n+2;
}
}
cout<<ans;
return 0;
}