#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define sz size() #define pb push_back #define mp make_pair #define fi first #define se second #define all(c) (c).begin(), (c).end() #define rep(i,a,b) for(ll i=(a);i<(b);++i) #define clr(a, b) memset((a), (b) ,sizeof(a)) #define ctos(c) string(1,c) #define print(x) cout<<#x<<" = "<>n>>q; clr(dh,-1); clr(dl,-1); clr(dd,-1); clr(dddh,-1); clr(dddl,-1); set se; vector > vp; rep(i,0,q){ ll a,b; cin>>a>>b; a++;b++; vp.pb(mp(a,b)); se.insert(a); se.insert(b); } vector vse(all(se)); map ma; rep(i,0,vse.sz){ dd[i+1]=vse[i]; ma[vse[i]] = i+1; } vector > vp1; rep(i,0,vp.sz){ vp1.pb(mp(ma[vp[i].fi],ma[vp[i].se])); } ll mx = 0; rep(i,0,vp1.sz){ ll a1,b1; ll a = vp1[i].fi; ll b = vp1[i].se; ll pa = getl(a-1); if(pa==-1)a1 = a; else { if(dd[a]-1<=dd[geth(a-1)]){ a1 = pa; } else{ a1 = a; } } ll pb = geth(b+1); if(pb==-1)b1 = b; else { if(dd[getl(b+1)]<=dd[b]+1){ b1 = pb; } else{ b1 = b; } } ll index1 = a1/A; ll index2 = b1/A; rep(j,index1*A,(index1+1)*A){ if(a1 <= j && j <= b1){ dl[j] = a1; dh[j] = b1; } } rep(j,index2*A,(index2+1)*A){ if(a1 <= j && j <= b1){ dl[j] = a1; dh[j] = b1; } } rep(j,index1+1,index2){ dddl[j] = a1; dddh[j] = b1; } mx = max(mx,dd[b1]-dd[a1]+1); printf("%lld\n", mx); } return 0; }