// 1481
# Include <iostream>
# Include <cstdio>
Using namespace STD;
# Define n 50010
Int parent [N], sum;
Void Init ()
{
For (INT I = 1; I <= N; I ++) parent [I] = I;
}
Int find (int x)
{
If (x = parent [x]) return X;
Else return find (parent [x]);
}
Void Marge (int A, int B)
{
Int TA = find ();
Int TB = find (B );
If (Ta! = Tb) {parent [Ta] = Tb; sum --;}
}
Int main ()
{
Int n, m, I, X, Y, K;
While (scanf ("% d", & N, & M )! = EOF & (n + M ))
{
Init (); sum = N;
For (I = 0; I <m; I ++)
{
Scanf ("% d", & K, & X, & Y );
If (x> N | Y> N)
{Sum --; continue ;}
If (k = 1) Marge (x, y );
Else if (k = 2 & X = y) sum --;
}
Printf ("% d \ n", N-sum );
}
Return 0;
}
# Include <iostream>
# Include <cstdio>
Using namespace STD;
# Define n 50010
Int parent [N], sum;
Void Init ()
{
For (INT I = 1; I <= N; I ++) parent [I] = I;
}
Int find (int x)
{
If (x = parent [x]) return X;
Else return parent [x] = find (parent [x]);
}
Void Marge (int A, int B)
{
Int TA = find ();
Int TB = find (B );
If (Ta! = Tb) {parent [Ta] = Tb; sum --;}
}
Int main ()
{
Int n, m, I, X, Y, K;
While (scanf ("% d", & N, & M )! = EOF & (n + M ))
{
Init (); sum = N;
For (I = 0; I <m; I ++)
{
Scanf ("% d", & K, & X, & Y );
If (x> N | Y> N)
{Sum --; continue ;}
If (k = 1) Marge (x, y );
Else if (k = 2 & X = y) sum --;
}
Printf ("% d \ n", N-sum );
}
Return 0;
}