#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include #include #define rep(i,n) for(int i=0;i<(n);i++) #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define sz(x) ((int)(x).size()) #define pb push_back using ll = long long; using namespace std; templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b> N >> M; set st; st.insert(1); st.insert(N); map> G; map> CO; rep(i,M){ int a,b; cin >> a >> b; G[a].pb(b); CO[a].pb(2*b-2*a-1); st.insert(a); st.insert(b); } vector vst; for(auto s:st){ vst.pb(s); } rep(i,sz(vst)-1){ int a = vst[i]; int b = vst[i+1]; G[a].pb(b); CO[a].pb(2*(b-a)); } map D; set used; priority_queue, vector>, greater>> q; q.push({(ll)0,1}); while(!q.empty()){ ll d = q.top().first; int to = q.top().second; q.pop(); if(used.count(to)) continue; used.insert(to); D[to] = d; rep(i,sz(G[to])){ int nxt=G[to][i]; if(D.count(nxt) && D[nxt] <= D[to] + CO[to][i]) continue; q.push({D[to] + CO[to][i], nxt}); } } cout << D[N] << endl; return 0; }