#include<bits/stdc++.h>
using namespace std;
const int N=5e4+1;
const int K=1e5+1;
int n,k;
int ans;
int op,x,y;
bool isTrue;
int king[N];
void check1(int x,int y){
if(x>n || y>n) {
ans++;
isTrue=false;
}
}
void check2(int x,int y){
if(x>n || y>n) {
ans++;
isTrue =false;
}
if(x==y){
if(isTrue) ans++;
isTrue =false;
}
}
int find(int x){
return king[x]==x?x:king[x]=find(king[x]);
}
void isReasonable(int x,int y){
if(x!=y){
int rx = find(x);
int ry = find(y);
if(rx==ry) isTrue=false;
}
}
void Union(int x,int y){
int rx = find(x);
int ry = find(y);
king[ry]=rx;
}
int main(){
freopen("02.txt","r",stdin);
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++) king[i]=i;
for(int i=1;i<=k;i++){
scanf("%d%d%d",&op,&x,&y);
isTrue=true;
if(op==1){
check1(x,y);
if(!isTrue) continue;
isReasonable(x,y);
if(!isTrue) ans++;
}
if(op==2){
check2(x,y);
if(!isTrue) continue;
Union(x,y);
}
}
printf("%d",ans);
}