#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
#define x first
#define y second
#define bg begin()
#define ed end()
#define pb push_back
#define mp make_pair
#define sz(a) int((a).size())
#define R(i,n) for(int i(0);i<(n);++i)
#define L(i,n) for(int i((n)-1);i>=0;--i)
const int iinf=0x3f3f3f3f;
const ll linf=0x3f3f3f3f3f3f3f3f;
//Data
const int N=500,D=61;
const ll M=1e18;
int n,m;
//Matrix
struct Matrix{
bitset<N> row[N],col[N];
bool get(int i,int j){return row[i][j];}
void set(int i,int j){row[i].set(j),col[j].set(i);}
Matrix friend operator*(Matrix p,Matrix q){
Matrix res;
R(i,n)R(j,n)if((p.row[i]&
q.col[j]).any()) res.set(i,j);
return res;
}
}e[D][2],now;
//Main
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
R(i,m){
int u,v,w;
cin>>u>>v>>w,--u,--v;
e[0][w].set(u,v);
}
R(i,D-1) e[i+1][0]=e[i][0]*e[i][1],
e[i+1][1]=e[i][1]*e[i][0];
if(e[D-1][0].row[0].any()) cout<<-1<<'\n',exit(0);
int t=0; ll ns=0; now.set(0,0);
L(i,D)if((now*e[i][t]).row[0].any())
now=now*e[i][t],t^=1,ns+=1ll<<i;
if(ns>M) cout<<-1<<'\n',exit(0);
cout<<ns<<'\n';
return 0;
}