#include <bits/stdc++.h>
#define PII pair<int, int>
using namespace std;
const int N = 1e5 + 5, M = 3e5 + 5;
int h[N], e[M], ne[M], w[M], idx;
vector<pair<int, int>> ed[N];
long long dis[N];
int cnt[N];
bool vis[N];
int n, m;
void add(int a, int b, int t)
{
e[idx] = b, w[idx] = t, ne[idx] = h[a], h[a] = idx, idx ++ ;
}
bool spfa()
{
stack<int> que;
memset(dis, -0x3f, sizeof dis);
dis[0] = 0; vis[0] = true; que.push(0);
while(!que.empty()){
int u = que.top(); que.pop(); vis[u] = false;
for(int i = h[u]; i != -1; i = ne[i]){
int v = e[i], k = w[i];
if(dis[v] < dis[u] + k){
dis[v] = dis[u] + k;
cnt[v] = cnt[u] + 1;
if(cnt[v] > n) return false;
if(!vis[v]){
vis[v] = true;
que.push(v);
}
}
}
}
return true;
}
int main()
{
cin >> n >> m;
memset(h, -1, sizeof h);
for(int i = 1; i <= m; i ++ ){
int op, x, y; cin >> op >> x >> y;
if(op == 1) add(x, y, 0), add(y, x, 0);
if(op == 2) add(x, y, 1);
if(op == 3) add(y, x, 0);
if(op == 4) add(y, x, 1);
if(op == 5) add(x, y, 0);
}
for(int i = 1; i <= n; i ++ ) add(0, i, 1);
if(!spfa()) cout << -1;
else{
long long res = 0;
for(int i = 1; i <= n; i ++ ){
res += dis[i];
}
cout << res;
}
return 0;
}