#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<pair<int,pair<int,int>>>temp[400005];
vector<pair<int,int>>adj[400005];
vector<pair<int,pair<int,int>>>res[400005];
int val[400005];
int cnt[400005];
int dis[400005];
int sum[400005];
int com[400005];
int inf=1e18;
int cur=0;
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
int n,m;cin>>n>>m;
cur=n;
for(int i=1;i<=m;i++){
int a,b,c,p;cin>>a>>b>>c>>p;
temp[a].push_back({b,{c,p}});
temp[b].push_back({a,{c,p}});
}
for(int i=1;i<=n;i++){
vector<int>v;
for(auto x:temp[i]){
int c=x.second.first;
int p=x.second.second;
cnt[c]++;
res[c].push_back(x);
sum[c]+=p;
v.push_back(c);
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
com[i]=(v.size()==m);
//cerr<<"com:"<<com[i]<<"\n";
for(auto x:temp[i]){
int c=x.second.first;
int p=x.second.second;
cnt[c]--;
sum[c]-=p;
res[c].clear();
}
}
for(int i=1;i<=n;i++){
vector<int>v;
for(auto x:temp[i]){
int c=x.second.first;
int p=x.second.second;
cnt[c]++;
res[c].push_back(x);
sum[c]+=p;
v.push_back(c);
}
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
for(auto x:v){
cur++;
for(int i=0;i<res[x].size();i++){
auto e=res[x][i];
adj[e.first].push_back({cur,0});
adj[cur].push_back({e.first,sum[x]-e.second.second});
}
}
for(auto x:temp[i]){
int go=x.first;
int c=x.second.first;
int p=x.second.second;
adj[i].push_back({go,min(p,sum[c]-p)});
}
for(auto x:temp[i]){
int c=x.second.first;
int p=x.second.second;
cnt[c]--;
sum[c]-=p;
res[c].clear();
}
}
for(int i=1;i<=cur;i++)dis[i]=inf;
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq;
pq.push({0,1});
while(!pq.empty()){
auto [cost,u]=pq.top();
pq.pop();
if(dis[u]!=inf)continue;
dis[u]=cost;
for(auto x:adj[u]){
pq.push({cost+x.second,x.first});
}
}
if(dis[n]==inf)cout<<"-1\n";
else cout<<dis[n];
}