#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <numeric>
using namespace std;

typedef pair<int,int> pii;
typedef long long ll;

const ll inf = (ll)1e18+7;

template<typename T> bool setmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
template<typename T> bool setmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }


int main()
{
	int n, m;
	cin >> n >> m;
	int s, t;
	cin >> s >> t;
	s--; t--;
	int u, v;
	cin >> u >> v;
	u--; v--;

	vector<vector<pii> > adj(n);
	for (int i = 0; i < m; i++) {
		int a, b, c;
		cin >> a >> b >> c;
		a--; b--;
		adj[a].push_back({b, c});
		adj[b].push_back({a, c});
	}
	auto dijkstra = [&](vector<vector<pii> >& g, int a) {
		typedef pair<ll,int> point;
		vector<ll> dist(n, inf);
		priority_queue<point, vector<point>, greater<point> > pq;
		dist[a] = 0;
		pq.push({0ll, a});
		while (not pq.empty()) {
			auto [d, cur] = pq.top(); pq.pop();
			if (d != dist[cur]) continue;
			for (auto [nxt, w] : g[cur]) {
				if (setmin(dist[nxt], d + w)) {
					pq.push({dist[nxt], nxt});
				}
			}
		}
		return dist;
	};
	auto distS = dijkstra(adj, s);
	auto distT = dijkstra(adj, t);
	auto distU = dijkstra(adj, u);
	auto distV = dijkstra(adj, v);
	auto sortedOrder = [&](const vector<ll>& v) {
		vector<int> order(v.size());
		iota(order.begin(), order.end(), 0);
		sort(order.begin(), order.end(), [&](int a, int b) { return v[a] < v[b]; });
		return order;
	};
	ll totDist = distS[t];
	ll ans = inf;
	{
		auto ordS = sortedOrder(distS);
		auto dp = distU;
		for (int a : ordS) {
			for (auto&& [b, w] : adj[a]) {
				if (distS[a] + w + distT[b] == totDist) {
					setmin(dp[b], dp[a]);
				}
			}
		}
		for (int i = 0; i < n; i++) {
			setmin(ans, distV[i] + dp[i]);
		}
	}
	{
		auto ordT = sortedOrder(distT);
		auto dp = distU;
		for (int a : ordT) {
			for (auto&& [b, w] : adj[a]) {
				if (distT[a] + w + distS[b] == totDist) {
					setmin(dp[b], dp[a]);
				}
			}
		}
		for (int i = 0; i < n; i++) {
			setmin(ans, distV[i] + dp[i]);
		}
	}
	cout << ans << endl;
}