#include <iostream>
using namespace std;
struct node
{
int father;
int relation;
};
node p[50010];
void make_set(int val)
{
p[val].father = val;
p[val].relation = 0;
}
void init()
{
for(int i = 0; i < 50010; ++i)
make_set(i);
}
int find_set(int val)
{
if(val == p[val].father)
return val;
int pre = p[val].father;
p[val].father = find_set(pre);
p[val].relation = (p[val].relation + p[pre].relation) % 3;
return p[val].father;
}
int main(void)
{
//freopen("1.txt", "r", stdin);
int n, m, r, x, y;
int rootx, rooty;
int error = 0;
init();
cin >> n >> m;
for(int k = 1; k <= m; ++k)
{
//cin >> r >> x >> y; // cin就TLE,scanf AC
scanf("%d%d%d", &r, &x, &y);
if(x > n || y > n || (r == 2 && x == y))
{
error++;
continue;
}
rootx = find_set(x); rooty = find_set(y);
if(rootx != rooty)
{
p[rootx].father = rooty;
p[rootx].relation = (3 - p[x].relation + r-1 + p[y].relation) % 3;
}
else
{
if(r == 1 && p[x].relation != p[y].relation)
error++;
else if(r == 2 && (p[y].relation + 3-p[x].relation) % 3 != (4-r)%3)
error++;
}
}
cout << error << endl;
return 0;
}