#include<iostream>
#include<cstdio>
using namespace std;
const int MAX_N = 10000000;
int pre[MAX_N];
int N,k; // N:animal num k:description num
int mark,a,b;
int count = 0; // error num
int find(int root){
int x = root ;
while(root != pre[root]){
root = pre[root];
}
while(x != root){
int tmp = pre[x];
pre[x] = root;
x = pre[x];
}
return root;
}
bool same(int x,int y){
return find(x)==find(y);
}
void merge(int x, int y){
int f1 = find(x);
int f2 = find(y);
if(f1!=f2){
pre[f1] = f2;
}
}
int main(){
cin>>N>>k;
for (int i = 1;i<=N*3;i++) pre[i] = i;
for(int i = 0; i < k; i++){
cin>>mark>>a>>b;
if(a < 0 || b < 0 || a > N || b > N) {
count++;
continue;
}
if(mark == 1){
if(same(a,b+N)||same(a,b+2*N))count++;
else{
merge(a,b);
merge(a+N,b+N);
merge(a+2*N,b+2*N);
}
}else if(mark = 2){
if(same(a,b) || same(a,b+2*N)) count++;
else{
merge(a,b+N);
merge(a+N,b+2*N);
merge(a+2*N,b);
}
}
}
cout<<count<<endl;
return 0;
}