#include<bits/stdc++.h>
#define int long long
#define MAXN 100010
using namespace std;
inline void read(int &a){
bool w = false; a = 0;
char c = getchar();
while(c<'0'||c>'9'){if(c='-')w=true;c=getchar();}
while(c>='0'&&c<='9'){a=(a<<3)+(a<<1)+(c^48);c=getchar();}
if(w) a = -a;
}
int n,k,ans = 0;
int pre[MAXN*3];
int find(int x){
if(!pre[x]) return x;
return pre[x] = find(pre[x]);
}
void unionn(int x,int y){
x = find(x);
y = find(y);
if(x != y) pre[y] = x;
}
signed main(){
read(n);
read(k);
int op,x,y;
while(k--){
read(op);
read(x);
read(y);
if(x>n||y>n){
ans++;
continue;
}
int xb = n+x;
int yb = n+y;
int xc = 2*n+x;
int yc = 2*n+y;
if(op == 1){
if(find(xb)!=find(y) && find(yb)!=find(x) && find(xc)!=find(y) && find(yc)!=find(x)){
unionn(x,y);
unionn(xb,yb);
unionn(xc,yc);
}else ans++;
}
else if(op == 2){
if(find(x)!=find(y) && find(xb)!=find(y) && find(xc)!=find(yb) && find(xc)!=find(yc)){
unionn(x,yb);
unionn(y,xc);
unionn(xb,yc);
}else ans++;
}
}
printf("%lld",ans);
return 0;
}