#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair <int,int>
#define a3 array <int,3>
const int N=1e5+5;
const int INF=1e15+7;
int n,m,st1,en1,st2,en2,d1[N],d2[N],d3[N],dp1[N],dp2[N],ans;
vector <pii> adj[N];
void stp1(int st,int d[]){
priority_queue <pii,vector <pii>,greater <pii>> pq;
pq.push({d[st]=0,st});
while(!pq.empty()){
auto [d_u,u]=pq.top();
pq.pop();
if(d_u>d[u]) continue;
for(auto [v,w]:adj[u]) if(d[v]>d_u+w) pq.push({d[v]=d_u+w,v});
}
}
void stp2(int st,int en){
for(int i=0;i<N;i++) dp1[i]=dp2[i]=INF;
vector <bool> vis(N+5,false);
priority_queue <a3,vector <a3>,greater <a3>> pq;
pq.push({0,st,0});
while(!pq.empty()){
auto [d_u,u,p_u]=pq.top();
pq.pop();
if(!vis[u]){
vis[u]=true;
d3[u]=d_u;
dp1[u]=min(dp1[p_u],d1[u]);
dp2[u]=min(dp1[u]+d2[u],dp2[p_u]);
for(auto [v,w]:adj[u]) pq.push({d_u+w,v,u});
}
else if(d3[u]==d_u){
dp1[u]=min(dp1[u],dp1[p_u]);
dp2[u]=min({dp2[u],dp1[u]+d2[u],dp2[p_u]});
}
}
ans=min(ans,dp2[en]);
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
for(int i=0;i<N;i++) d1[i]=d2[i]=INF;
cin >> n >> m >> st1 >> en1 >> st2 >> en2;
for(int i=1;i<=m;i++){
int u,v,w;
cin >> u >> v >> w;
adj[u].push_back({v,w});
adj[v].push_back({u,w});
}
stp1(st2,d1);
stp1(en2,d2);
ans=d1[en2];
stp2(st1,en1);
stp2(en1,st1);
cout << ans;
}