#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll N,K,ans=0,a,b,c,n[500001]={};
tuple<ll,ll,ll> s[100001]={};
ll find(ll x){
if(n[x]==x)
return x;
n[x]=find(n[x]);
return n[x];
}
bool eat(ll a,ll b){
if(find(a)==find(b))
return 0;
n[find(b+N)]=find(a);
n[find(b+2*N)]=find(a+N);
n[find(b+3*N)]=find(a+2*N);
return 1;
}
bool same(ll a,ll b){
if(find(a)==find(b+N))
return 0;
n[find(b)]=find(a);
n[find(b+N)]=find(a+N);
n[find(b+2*N)]=find(a+2*N);
return 1;
}
int main(){
cin>>N>>K;
iota(n,n+3*N+1,0);
for(int i=0;i<K;i++){
cin>>a>>b>>c;
if((a==b&&a==2)||a>N||b>N){
K--,i--,ans++;
continue;
}
if(a==1)
if(!same(b,c))
ans++;
else if(a==2)
if(!eat(b,c))
ans++;
}
cout<<ans;
return 0;
}