#include #define rep(i,n) for(int i=0;i<(n);i++) using namespace std; using lint=long long; const long long INF=1LL<<61; int main(){ set> Il,Ir; // 左端でソート, 右端でソート multiset Sz; int q; scanf("%*lld%d",&q); rep(_,q){ lint l,r; scanf("%lld%lld",&l,&r); r++; while(1){ { auto it=Il.upper_bound({l-1,INF}); if(it!=Il.end() && (it->first)<=r){ lint tl,tr; tie(tl,tr)=*it; r=max(r,tr); Sz.erase(Sz.find(tr-tl)); Il.erase(it); Ir.erase({tr,tl}); continue; } } { auto it=Ir.upper_bound({l,-INF}); if(it!=Ir.end() && (it->second)<=r){ lint tl,tr; tie(tr,tl)=*it; l=min(l,tl); Sz.erase(Sz.find(tr-tl)); Ir.erase(it); Il.erase({tl,tr}); continue; } } break; } Sz.emplace(r-l); Il.emplace(l,r); Ir.emplace(r,l); printf("%lld\n",*Sz.rbegin()); } return 0; }