#include using namespace std; using ll=long long; using ull=unsigned long long; using pll=pair; using tll=tuple; using ld=long double; const ll INF=(1ll<<60); #define rep(i,n) for (ll i=0;i<(ll)(n);i++) #define replr(i,l,r) for (ll i=(ll)(l);i<(ll)(r);i++) #define all(v) v.begin(),v.end() #define len(v) ((ll)v.size()) template inline bool chmin(T &a,T b){ if(a>b){ a=b; return true; } return false; } template inline bool chmax(T &a,T b){ if(a struct interval_set{ const T T_INF=numeric_limits::max()/2; map mp; T sum=0; bool adjacent_merge; interval_set(bool adjacent_merge_):sum(0),adjacent_merge(adjacent_merge_){ mp[-T_INF]=-T_INF; mp[T_INF]=T_INF; } bool covered(T l,T r){ //[l,r) assert(l<=r); if(l==r) return true; auto itr=prev(mp.upper_bound(l)); return itr->first<=l&&r<=itr->second; } bool covered(T x){ return covered(x,x+1); } pair covered_by(T l,T r){ //[l,r) assert(l<=r); if(l==r) return {T_INF,T_INF}; auto itr=prev(mp.upper_bound(l)); if(itr->first<=l&&r<=itr->second) return *itr; return {-T_INF,-T_INF}; } pair covered_by(T x){ return covered_by(x,x+1); } T insert(T l,T r){ //[l,r) assert(l<=r); if(l==r) return 0; auto itrl=mp.lower_bound(l),itrr=mp.lower_bound(r+adjacent_merge); if(lsecond+adjacent_merge) itrl--; l=min(l,itrl->first); r=max(r,prev(itrr)->second); T ret=r-l; for(auto itr=itrl;itr!=itrr;itr++) ret-=itr->second-itr->first; mp.erase(itrl,itrr); mp[l]=r; sum+=ret; return ret; } T insert(T x){ return insert(x,x+1); } T erase(T l,T r){ //[l,r) assert(l<=r); if(l==r) return 0; auto itrl=mp.lower_bound(l),itrr=mp.lower_bound(r); if(lsecond) itrl--; T x=min(l,itrl->first); T y=max(r,prev(itrr)->second); T ret=0; for(auto itr=itrl;itr!=itrr;itr++) ret+=itr->second-itr->first; mp.erase(itrl,itrr); if(xfirst<=x&&xsecond) return itr->second; return x; } vector> get(){ vector> ret; for(auto [l,r]:mp){ if(abs(l)==T_INF) continue; ret.emplace_back(l,r); } return ret; } }; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); ll d,q; cin >> d >> q; interval_set st(true); ll ans=0; while(q--){ ll a,b; cin >> a >> b; b++; st.insert(a,b); auto [l,r]=st.covered_by(a); chmax(ans,r-l); cout << ans << '\n'; } }