#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,s,n) for(int i=s;i<=n;i++)
#define vi vector<int>
#define pb push_back
#define pii pair<int,int>
#define eb emplace_back
#define fi first
#define se second
#define tup pair<int, pii>
const int N = 1e5 + 5;
vector<vector<pii>> adj(N);
int n,m,s,t,u,v;
void tmin(int &a, int b) {
if(a>b) a=b;
}
vi dijkstra(int src) {
vi d(N, LLONG_MAX);
d[src] = 0;
priority_queue<pii, vector<pii>, greater<pii>> pq;
pq.push({d[src], src});
while(!pq.empty()) {
pii p = pq.top(); pq.pop();
for(pii p1 : adj[p.se]) {
if(d[p1.fi]>p.fi+p1.se) {
d[p1.fi] = p.fi + p1.se;
pq.push({d[p1.fi], p1.fi});
}
}
}
return d;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>s>>t>>u>>v;
rep(i,1,m) {
int a,b,c;
cin>>a>>b>>c;
adj[a].eb(b,c);
adj[b].eb(a,c);
}
vi ds = dijkstra(s),
dt = dijkstra(t),
du = dijkstra(u),
dv = dijkstra(v);
vi mnu(n+5, LLONG_MAX), mnv(n+5, LLONG_MAX);
vi ord(n);
rep(i,0,n-1) ord[i]=i+1;
sort(ord.begin(), ord.end(), [&](int &a, int &b) {
return ds[a] < ds[b];
});
int ans = du[v];
rep(i,0,n-1) {
int a = ord[i];
tmin(mnu[a], du[a]);
tmin(mnv[a], dv[a]);
for(pii p : adj[a]) {
int b = p.fi;
if(ds[a] + p.se + dt[b] == ds[t]) {
tmin(mnu[b],mnu[a]);
tmin(mnv[b],mnv[a]);
tmin(ans,min(mnu[b]+mnv[b],mnu[a]+mnv[a]));
}
}
}
cout << ans;
return 0;
}