#include<bits/stdc++.h>
using namespace std;
struct an{
long long kin,a,b;
}aa[100005];
long long n,k,f[50005],c0,c1,c2,flag=0,ans=0,xb=0;
set<long long>my[50005];
long long findd(long long x){
if(f[x]==x)return x;
return f[x]=findd(f[x]);
}
void join(long long x2,long long y2){
long long fx=findd(x2),fy=findd(y2);
if(fx!=fy) f[fx]=fy;
}
bool cmp(an qq,an qqq){
return qq.kin<qqq.kin;
}
int main(){
cin>>n>>k;
for(long long i=1;i<=n;i++)f[i]=i;
for(long long i=1;i<=k;i++){
cin>>c0>>c1>>c2;
if(c1>n||c2>n||(c1==c2&&c0==2)){
flag++;
ans++;
}
else{
aa[++xb].kin=c0;aa[xb].a=c1;aa[xb].b=c2;
}
}
k-=flag;
sort(aa+1,aa+k+1,cmp);
for(long long i=1;i<=k;i++){
if(aa[i].kin==1){
join(aa[i].a,aa[i].b);
}
else{
if(findd(aa[i].a)==findd(aa[i].b)||my[aa[i].a].find(aa[i].b)!=my[aa[i].a].end()){ans++;}
else{my[aa[i].b].insert(aa[i].a);}
}
}
cout<<ans;
return 0;
}
调关