#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl '\n'
const int N = 1e5 + 5;
vector<pair<int,ll>> adj[N];
int n;
vector<ll> dijk(int src){
vector<ll> dis(n+1,1e18);
priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<>> q;
q.push({0,src});
dis[src] = 0;
while(q.size()){
auto [cost,node] = q.top(); q.pop();
if(cost > dis[node]) continue;
for(auto [ch,c] : adj[node]){
if(cost + c > dis[ch]) continue;
dis[ch] = cost + c;
q.push({cost+c,ch});
}
}
return dis;
}
void solve(){
int m;
int s,t,u,v;
cin>>n>>m>>s>>t>>u>>v;
for(int i=0;i<m;i++){
int a,b,c;
cin>>a>>b>>c;
adj[a].push_back({b,c});
adj[b].push_back({a,c});
}
vector<ll> d = dijk(v);
priority_queue<array<ll,3>,vector<array<ll,3>>,greater<>> q;
vector<pair<ll,ll>> dis(n+1,{1e18,1e18});
dis[u] = {0,d[u]};
q.push({0,d[u],u});
while(q.size()){
assert(q.size() <= 1e8);
auto [cost,mn,node] = q.top(); q.pop();
if(make_pair(cost,mn) > dis[node]) continue;
for(auto [ch,c] : adj[node]){
if(make_pair(cost+c,min(mn,d[ch])) > dis[ch]) continue;
dis[ch] = {cost + c , min(mn,d[ch])};
q.push({cost+c,min(mn,d[ch]),ch});
}
}
cout<<dis[t].second<<endl;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int t=1;
//cin>>t;
while(t--){
solve();
}
return 0;
}