#include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+5;
    typedef long long ll;
    ll dis[N],dis1[N],dis2[N],inf=1e18,len[N];
    int n,nxt[N],head[N],to[N],ecnt=1;
    void add_edge(int u,int v,int w) {nxt[++ecnt]=head[u];to[ecnt]=v;len[ecnt]=w;head[u]=ecnt;}
    struct node {
    	int p;ll w;
    	bool operator<(const node &u) const{return w>u.w;}
    };
    priority_queue<node> Q;
    void DJ1(int s) {
    	memset(dis1,0x3f,sizeof(dis1));
    	Q.push((node){s,0});
    	dis1[s]=0;
    	while(!Q.empty()) {
    		int u=Q.top().p; Q.pop();
    		for(int i=head[u];i;i=nxt[i]) {
    			int v=to[i];
    			if(dis1[v]>dis1[u]+len[i]) {
    				dis1[v]=dis1[u]+len[i];
    				Q.push((node){v,dis1[v]});
    			}
    		}
    	}
    }
    void DJ2(int s) {
    	memset(dis2,0x3f,sizeof(dis2));
    	Q.push((node){s,0});
    	dis2[s]=0;
    	while(!Q.empty()) {
    		int u=Q.top().p; Q.pop();
    		for(int i=head[u];i;i=nxt[i]) {
    			int v=to[i];
    			if(dis2[v]>dis2[u]+len[i]) {
    				dis2[v]=dis2[u]+len[i];
    				Q.push((node){v,dis2[v]});
    			}
    		}
    	}
    }
    void DJ(int s) {
    	memset(dis,0x3f,sizeof(dis));
    	Q.push((node){s,0});
    	dis[s]=0;
    	while(!Q.empty()) {
    		int u=Q.top().p; Q.pop();
    		for(int i=head[u];i;i=nxt[i]) {
    			int v=to[i];
    			if(dis[v]>dis[u]+len[i]) {
    				dis[v]=dis[u]+len[i];
    				Q.push((node){v,dis[v]});
    			}
    		}
    	}
    }
    int main() {
    	int m,S,T,U,V;
    	scanf("%d%d",&n,&m);
    	scanf("%d%d%d%d",&S,&T,&U,&V);
    	for(int i=1;i<=m;i++) {
    		int u,v,w;
    		scanf("%d%d%d",&u,&v,&w);
    		add_edge(u,v,w),add_edge(v,u,w);
    	}
    	DJ1(S),DJ2(T);
    	ll D=dis1[T];
    	for(int u=1;u<=n;u++) {
    		for(int j=head[u];j;j=nxt[j]) {
    			int v=to[j];
    			if(dis1[u]+len[j]+dis2[v]==D) len[j]=0;
    		}
    	}
    	DJ(U);
    	ll ans=dis[V];
    	for(int u=1;u<=n;u++) {
    		for(int j=head[u];j;j=nxt[j]) {
    			int v=to[j];
    			if(dis1[v]+len[j]+dis2[u]==D) len[j^1]=len[j],len[j]=0;
    		}
    	}
    	DJ(U);
    	ans=min(ans,dis[V]);
    	printf("%lld",ans);
    	return 0;
    }