#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define NEGGERS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
const ll N=1e5+31;
const ll INF=1e18;
vector<pair<ll,ll>> g[N];
ll dist1[N],dist2[N];
void dijkstra(ll src,ll dist[],ll n){
for(ll i=1;i<=n;i++) dist[i]=INF;
priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>> pq;
pq.push({0,src});
dist[src]=0;
while(!pq.empty()){
ll d=pq.top().first;
ll v=pq.top().second;
pq.pop();
if(d!=dist[v]) continue;
for(auto it:g[v]){
ll to=it.first;
ll w=it.second;
if(dist[to]>d+w){
dist[to]=d+w;
pq.push({dist[to],to});
}
}
}
}
void solve(){
ll n,m;
cin>>n>>m;
ll s,t,u,v;
cin>>s>>t;
cin>>u>>v;
for(ll i=0;i<m;i++){
ll a,b,c;
cin>>a>>b>>c;
g[a].push_back({b,c});
g[b].push_back({a,c});
}
dijkstra(s,dist1,n);
dijkstra(t,dist2,n);
ll ans=INF;
ans=min(ans,dist1[u]+dist2[v]);
ans=min(ans,dist1[v]+dist2[u]);
cout<<ans;
}
signed main(){
NEGGERS
ll tt=1;
//cin>>tt;
while(tt--){
solve();
}
}