#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define FORD(i, b, a) for (int i = (b), _a = (a); i >= _a; --i)
#define ALL(x) x.begin(), x.end()
#define RALL(x) x.rbegin(), x.rend()
#define el cout<<"\n";
#define ii pair<int, int>
#define fi first
#define se second
#define int long long
using namespace std;
const int MAXN = 1e5 + 5;
const int INF = 1e18;
int n, m, S, T, U, V, ans, ds[MAXN], dt[MAXN], du[MAXN], dv[MAXN], vis[MAXN];
ii mi[MAXN];
vector<ii> g[MAXN];
vector<int> adj[MAXN];
vector<pair<ii, int>> canh;
void djk(int st, int d[]) {
FOR(i, 1, n) d[i] = INF;
d[st] = 0;
priority_queue<ii, vector<ii>, greater<ii>> p;
p.push({0, st});
while(p.size()) {
auto x = p.top(); p.pop();
if(d[x.se] < x.fi) continue;
for(auto v : g[x.se]) {
if(d[v.fi] > x.fi + v.se) {
d[v.fi] = x.fi + v.se;
p.push({d[v.fi], v.fi});
}
}
}
}
void dfs(int u) {
vis[u] = 1;
mi[u] = {du[u], dv[u]};
for(auto v : adj[u]) if(!vis[v]) {
dfs(v);
mi[u].fi = min(mi[u].fi, mi[v].fi);
mi[u].se = min(mi[u].se, mi[v].se);
}
ans = min({ans, du[u] + mi[u].se, mi[u].fi + dv[u]});
}
main(void) {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin >> n >> m >> S >> T >> U >> V;
FOR(i, 1, m) {
int x, y, w; cin >> x >> y >> w;
g[x].push_back({y, w});
g[y].push_back({x, w});
canh.push_back({{x, y}, w});
}
djk(S, ds);
djk(T, dt);
djk(U, du);
djk(V, dv);
for(auto tem : canh) {
int x = tem.fi.fi, y = tem.fi.se, w = tem.se;
if(ds[x] + dt[y] + w == ds[T]) {
adj[x].push_back(y);
}
if(ds[y] + dt[x] + w == ds[T]) {
adj[y].push_back(x);
}
}
ans = du[V];
dfs(S);
cout << ans;
return 0;
}
// T.T<33~~