1 //并查集加点东西,注意负数
2 #include<cstdio>
3 #include<cstring>
4 using namespace std;
5 int fa[50500];
6 int right[50500];
7 int find(int x){
8 if(fa[x]==x) return x;
9 int tmp=fa[x];
10 fa[x]=find(fa[x]);
11 right[x]+=right[tmp];
12 right[x]%=3;
13 return fa[x];
14 }
15 int main()
16 {
17 int n,m,k,a,b;
18 scanf("%d%d",&n,&m);
19 memset(right,0,sizeof(right));
20 for(int i=1;i<=n;i++) fa[i]=i;
21 int ans=0;
22 for(int i=1;i<=m;i++){
23 scanf("%d%d%d",&k,&a,&b);
24 if(a>n||b>n) {ans++;continue;}
25 int x=find(a);
26 int y=find(b);
27 if(k==1){
28 if(x==y){
29 if(right[a]!=right[b]) ans++;
30 }else
31 fa[y]=x,
32 right[y]=(right[a]-right[b]+3)%3;
33 }else
34 if(x==y){
35 if((right[a]+1)%3!=right[b]) ans++;
36 }else
37 fa[y]=x,
38 right[y]=(right[a]-right[b]+3+1)%3;
39
40 }
41 printf("%d\n",ans);
42 return 0;
43 }