N,M=map(int,input().split()) G1=[[] for _ in range(N+1)] G2=[[] for _ in range(N+1)] for _ in range(M): u,v,t=map(int,input().split()) G1[u].append([v,t]) G2[v].append([u,t]) import sys import heapq def dijkstra(graph, start): # 初期化 n = len(graph) visited = [False] * n distance = [10**19] * n distance[start] = 0 pq = [(0, start)] # ダイクストラ法 while pq: # 未処理の中で最小の距離を持つ頂点を取り出す dist, u = heapq.heappop(pq) if visited[u]: continue # 訪問済みにする visited[u] = True # uから到達可能な頂点の距離を更新する for v, weight in graph[u]: if not visited[v]: new_distance = distance[u] + weight if new_distance < distance[v]: distance[v] = new_distance heapq.heappush(pq, (new_distance, v)) return distance d1=dijkstra(G1,N-1)#N-1からの最短 d2=dijkstra(G1,N) d3=dijkstra(G2,N-1)#N-1への最短 d4=dijkstra(G2,N) for i in range(1,N-1): ans=min(d3[i]+d1[N]+d2[i],d4[i]+d2[N-1]+d1[i]) if(ans>=10**19): ans=-1 print(ans)