#include #include using namespace std; using namespace atcoder; typedef long long ll; typedef long double ld; #define REP(i, n) for (int i = 0; i < (n); ++i) #define REPR(i, n) for (int i = n - 1; i >= 0; --i) #define FOR(i, m, n) for (int i = m; i < n; ++i) #define FORR(i, m, n) for (int i = m; i >= n; --i) #define ALL(v) (v).begin(),(v).end() #define ALLR(v) (v).rbegin(),(v).rend() #define fi first #define se second #define PB push_back #define EB emplace_back template using PQ = priority_queue; template using QP = priority_queue,greater>; templatevoid debug(const T &v,ll h,ll w){for(ll i=0;ivoid debug(const T &v,ll n){for(ll i=0;ivoid debug(const vector&v){debug(v,v.size());} templatevoid debug(const vector>&v){for(auto &vv:v)debug(vv,vv.size());} templatevoid debug(stack st){while(!st.empty()){cerr<void debug(queue st){while(!st.empty()){cerr<void debug(deque st){while(!st.empty()){cerr<void debug(PQ st){while(!st.empty()){cerr<void debug(QP st){while(!st.empty()){cerr<void debug(const set&v){for(auto z:v)cerr<void debug(const multiset&v){for(auto z:v)cerr<void debug(const array &a){for(auto z:a)cerr<void debug(const map&v){for(auto z:v)cerr<<"["<void foo(Head&& head, Tail&&... tail){cerr << head << " ";foo(move(tail)...);} templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b> n >> m; vector x; x.PB(0); x.PB(n-1); vector a(m),b(m); REP(i,m){ cin >> a[i] >> b[i]; a[i]--,b[i]--; x.PB(a[i]); x.PB(b[i]); } sort(ALL(x)); x.erase(unique(ALL(x)),x.end()); map mp; int xs=x.size(); REP(i,xs) mp[x[i]]=i; vector>> e(xs); REP(i,xs-1) e[i].PB({i+1,(x[i+1]-x[i])*2}); REP(i,m){ e[mp[a[i]]].PB({mp[b[i]],(b[i]-a[i])*2-1}); } QP> q; vector d(xs,INF); d[0]=0; q.push({0,0}); while(!q.empty()){ auto [u,v]=q.top();q.pop(); for(auto [s,t]:e[v]){ if(chmin(d[s],d[v]+t)){ q.push({d[s],s}); } } } cout << d[xs-1] << endl; }