#include <iostream>
using namespace std;

struct type1
{
    
int parent;
    
int rank;
} FOOD[
50001];

int find(int i)
{
    
int t = FOOD[i].parent;

    
if (t < 0)
        
return i;
    FOOD[i].parent 
= find(t);
    FOOD[i].rank 
= (FOOD[t].rank + FOOD[i].rank) % 3;
    
return FOOD[i].parent;
}

int main()
{
    
int n, k;
    
int d, x, y, i;
    
int a, b;
    
int lie = 0;

    scanf(
"%d %d"&n, &k);
    
for (i = 1; i <= n; i++)
    {
        FOOD[i].parent 
= -1;
        FOOD[i].rank 
= 0;
    }
    
for (i = 0; i < k; i++)
    {
        scanf(
"%d %d %d"&d, &x, &y);
        
if (x > n || y > n)
            lie
++;
        
else if (d == 1)
        {
            a 
= find(x);
            b 
= find(y);
            
if (a == b)
            {
                
if (FOOD[x].rank != FOOD[y].rank)
                    lie
++;
            }
            
else
            {
                FOOD[a].parent 
= b;
                FOOD[a].rank 
= (FOOD[y].rank - FOOD[x].rank + 3% 3;
            }
        }
        
else   /* d == 2 */
        {
            
if (x == y)
                lie
++;
            
else
            {
                a 
= find(x);
                b 
= find(y);
                
if (a == b)
                {
                    
if (FOOD[x].rank != (FOOD[y].rank + 1% 3)
                        lie
++;
                }
                
else
                {
                    FOOD[a].parent 
= b;
                    FOOD[a].rank 
= (FOOD[y].rank - FOOD[x].rank + 4% 3;
                }
            }
        }
    }
    printf(
"%d\n", lie);
    
return 0;
}