#include <bits/stdc++.h>

using namespace std;
#define X first
#define Y second
typedef pair<int,int> P;
const int MAXN=1e5+10,INF=1<<27;
int n,m,x,y,z,dist[MAXN];
set<int> s[MAXN];//±ØÐëÒªÓÃset½øÐÐ´æ´¢£¬ÒòÎª¿ÉÄÜdist×îÐ¡Ê±ÓÐ¶àÖÖ¹«Ë¾¹©Ñ¡Ôñ 
vector<P> G[MAXN];

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		G[x].push_back(P(y,z));G[y].push_back(P(x,z));
	}
	
	priority_queue<P> q;
	for(int i=2;i<MAXN;i++) dist[i]=INF;
	dist[1]=0;q.push(P(0,1));
	while(!q.empty())
	{
		P t=q.top();q.pop();
		int u=t.Y,cost=-t.X,tmp;
		if(cost>dist[u]) continue;
		for(int i=0;i<G[u].size();i++)
		{
			int v=G[u][i].X,col=G[u][i].Y;
			tmp=dist[u]+(!s[u].count(col));
			if(tmp==dist[v]) s[v].insert(col);
			else if(tmp<dist[v])
			{
				s[v].clear();s[v].insert(col);
				dist[v]=tmp,q.push(P(-dist[v],v));
			}
		}
	}
	printf("%d",(dist[n]==INF)?-1:dist[n]);
	return 0;
}