import sys
import heapq
INF = int(10**9)
input = sys.stdin.readline
V,E = map(int,input().split(" "))
graph = [[] for _ in range(V+1)]
for i in range(E):
a,b,w = map(int,input().split(" "))
graph[a].append((b,w))
graph[b].append((a,w))
v1,v2 = map(int,input().split(" "))
def dijkstra(start):
distance = [INF] * (V+1)
q = []
heapq.heappush(q,(0,start))
distance[start]=0
while q:
dist,now = heapq.heappop(q)
if distance[now] < dist:
continue
for i in graph[now]:
cost = dist + i[1]
if distance[i[0]] > cost:
distance[i[0]] = cost
heapq.heappush(q,(cost,i[0]))
return distance
og_distance = dijkstra(1)
v1_distance = dijkstra(v1)
v2_distance = dijkstra(v2)
v1_path = og_distance[v1] + v1_distance[v2] + v2_distance[V] #1->v1, v1->v2, v2->V
v2_path = og_distance[v2] + v2_distance[v1] + v1_distance[V] #1->v2, v2->v1, v1->V
result = min(v1_path,v2_path)
print(result if result < INF else -1)