#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include <bits/stdc++.h>
using namespace std;
#define kien long long
#define pb push_back
#define FOR(i, a, b) for (int i = a;i <= b; i++)
#define FORD(i, a, b) for (int i = a;i >= b; i--)
#define pii pair<int, int>
#define dembit(a) __builtin_popcountll(a)
#define task "a"
#define fin(x) freopen(x".inp","r",stdin)
#define fou(x) freopen(x".out","w",stdout)
#define debug(x) cout << x << " ";
#define down cout << "\n"
const kien MOD = 1e9 + 7;
const int Million = 1e6 + 5;
const int MXN = 1e5 + 5;
kien n, m;
kien s, t, cu, cv;
vector<pair<kien,kien>> g[MXN];
void dijkstra(vector<kien> &d, kien s) {
priority_queue<pair<kien,kien>> pq;
d[s] = 0;
pq.push({0, s});
while(!pq.empty()) {
kien dist = -pq.top().first;
kien u = pq.top().second;
pq.pop();
if(dist > d[u]) continue;
for(auto e : g[u]) {
auto [v, w] = e;
kien nd = dist + w;
if(nd < d[v]) {
d[v] = nd;
pq.push({-nd, v});
}
}
}
}
kien calc(vector<kien> d1, vector<kien> d2, kien s, kien t) {
vector<kien> dt(n + 1, LLONG_MAX);
dijkstra(dt, t);
vector<pair<kien,kien>> dist(n + 1, {LLONG_MAX,0});
priority_queue<pair<pair<kien,kien>, kien>> pq;
dist[s] = {0, d1[s]};
pq.push({{0, d1[s]}, s});
while(!pq.empty()) {
auto cur = pq.top().first;
kien u = pq.top().second;
pq.pop();
kien w = -cur.first;
kien mn = cur.second;
if(make_pair(w,mn) > dist[u]) continue;
for(auto e : g[u]) {
kien v = e.first;
kien cost = e.second;
kien nw = w + cost;
kien tpp = min(mn, d1[v]);
if(nw < dist[v].first or (nw == dist[v].first and tpp < dist[v].second)) {
dist[v] = {nw, tpp};
pq.push({{-nw, tpp}, v});
}
}
}
kien res = d1[cv];
FOR (i, 1, n) {
if (dt[i] + dist[i].first == dist[t].first) {
res = min(res, dist[i].second + d2[i]);
}
}
return res;
}
void solve() {
cin >> n >> m;
cin >> s >> t >> cu >> cv;
kien a, b, c;
FOR (i, 1, m) {
cin >> a >> b >> c;
g[a].pb({b, c});
g[b].pb({a, c});
}
vector<kien> d1(n + 1, LLONG_MAX);
vector<kien> d2(n + 1, LLONG_MAX);
dijkstra(d1, cu);
dijkstra(d2, cv);
cout << min(calc(d1, d2, s, t), calc(d1, d2, t, s));
}
main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
if (fopen(task".inp", "r")) {
fin(task); fou(task);
}
int t = 1;
while(t--) solve();
cerr << "\n" << 1.0 * clock() / CLOCKS_PER_SEC << "s ";
}