#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(make_pair(l-1,INF)); if(it==Il.end() || r<(it->first)) break; lint tl,tr; tie(tl,tr)=*it; r=max(r,tr); Sz.erase(Sz.find(tr-tl)); Il.erase(it); Ir.erase({tr,tl}); } while(1){ auto it=Ir.upper_bound(make_pair(l,-INF)); if(it==Ir.end() || r<(it->second)) break; lint tl,tr; tie(tr,tl)=*it; l=min(l,tl); Sz.erase(Sz.find(tr-tl)); Ir.erase(it); Il.erase({tl,tr}); } Sz.emplace(r-l); Il.emplace(l,r); Ir.emplace(r,l); printf("%lld\n",*Sz.rbegin()); } return 0; }