#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int>> ve[100010];
int l1[100010];
int r1[100010];
int l2[100010];
int r2[100010];
int l3[100010];
int r3[100010];
int visitedu[100010];
int distu[100010];
int visitedv[100010];
int distv[100010];
int visiteds[100010];
int dists[100010];
priority_queue<pair<int,int>> pqq;
int main(){
int n,m,s,t,u,v;
cin>>n>>m>>s>>t>>u>>v;
for(int i=1;i<=m;i++){
int x,y,w;
cin>>x>>y>>w;
ve[x].push_back({y,w});
ve[y].push_back({x,w});
}
pqq.push({0,u});
while(pqq.empty()==0){
int w=-pqq.top().first;
int x=pqq.top().second;
pqq.pop();
if(visitedu[x]==1)
continue;
visitedu[x]=1;
distu[x]=w;
for(auto g:ve[x]){
if(visitedu[g.first]==0){
pqq.push({-g.second-w,g.first});
}
}
}
pqq.push({0,v});
while(pqq.empty()==0){
int w=-pqq.top().first;
int x=pqq.top().second;
pqq.pop();
if(visitedv[x]==1)
continue;
visitedv[x]=1;
distv[x]=w;
for(auto g:ve[x]){
if(visitedv[g.first]==0){
pqq.push({-g.second-w,g.first});
}
}
}
int ans=distu[v];
pqq.push({1,s});
l1[s]=distu[s];
r1[s]=distv[s];
l2[s]=distu[s];
r2[s]=distv[s];
l3[s]=distu[s];
r3[s]=distv[s];
while(pqq.empty()==0){
int w=-pqq.top().first;
int x=pqq.top().second;
pqq.pop();
if(visiteds[x]==1)
continue;
visiteds[x]=1;
dists[x]=w;
l1[x]=min(l1[x],distu[x]);
r1[x]=min(r1[x],distv[x]);
l2[x]=min(l2[x],distu[x]);
r2[x]=min(r2[x],distv[x]);
l3[x]=min(l3[x],distu[x]);
r3[x]=min(r3[x],distv[x]);
for(auto g:ve[x]){
if(visiteds[g.first]==0){
pqq.push({-g.second-w,g.first});
if(dists[g.first]==0){
dists[g.first]=g.second+w;
l1[g.first]=l1[x];
r1[g.first]=r1[x];
l2[g.first]=l2[x];
r2[g.first]=r2[x];
l3[g.first]=l3[x];
r3[g.first]=r3[x];
}
else if(dists[g.first]>g.second+w){
dists[g.first]=g.second+w;
l1[g.first]=l1[x];
r1[g.first]=r1[x];
l2[g.first]=l2[x];
r2[g.first]=r2[x];
l3[g.first]=l3[x];
r3[g.first]=r3[x];
}
else if(dists[g.first]==g.second+w){
if(l1[x]<l1[g.first]){
l1[g.first]=l1[x];
r1[g.first]=r1[x];
}
else{
if(l1[x]==l1[g.first])
r1[g.first]=min(r1[g.first],x);
}
if(r3[x]<r3[g.first]){
r3[g.first]=r3[x];
l3[g.first]=l3[x];
}
else{
if(r3[x]==r3[g.first])
l3[g.first]=min(l3[g.first],x);
}
if(l2[x]+r2[x]<l2[g.first]+r2[g.first]){
l2[g.first]=l2[x];
r2[g.first]=r2[x];
}
}
else{}
}
}
}
for(int i=1;i<=n;i++){
//cout<<distu[i]<<distv[i]<<" "<<l1[i]<<r1[i]<<" "<<l2[i]<<r2[i]<<" "<<l3[i]<<r3[i]<<endl;
}
cout<<min(ans,l2[t]+r2[t]);
return 0;
}