#include<bits/stdc++.h>
using namespace std;
pair<int,int>p[200005];
int n,m;
int mer(int a,int b){
    return(p[a].second<p[b].second?b:a);
}
int st[800005];
void build(int id,int l,int r){
    if(l==r){
        st[id]=r;
        return;
    }
    int mid=l+r>>1;
    build(id*2,l,mid);build(id*2+1,mid+1,r);
    st[id]=mer(st[id*2],st[2*id+1]);
}
int get(int id,int l,int r,int u,int v){
    if(l>v or r<r)return 0;
    if(u<=l and r<=v)return st[id];
    int mid=l+r>>1;
    return mer(get(id*2,l,mid,u,v),get(id*2+1,mid+1,r,u,v));
}
int up[200005][22];
int32_t main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    if(fopen("fire.inp","r")){freopen("fire.inp","r",stdin);freopen("fire.out","w",stdout);}
    cin>>n>>m;
    for(int i=1;i<=n;++i){
        cin>>p[i].first>>p[i].second;
        if(p[i].first>p[i].second)p[i].second+=m;
    }
    sort(p+1,p+1+n);
    build(1,1,n);
    for(int i=1;i<=n;++i){
        int l=p[i].first,r=p[i].second;
        pair<int,int>ct={r+1,0};
        auto vt=upper_bound(p+1,p+1+n,ct)-p;
        up[i][0]=get(1,1,n,1,vt-1);
    }
    for(int i=n;i;--i){
        for(int j=1;j<=20;++j)up[i][j]=up[up[i][j-1]][j-1];
    }
    int ans=1e9;
    for(int i=1;i<=n;++i){
        int l=p[i].first,r=p[i].second,u=i,re=1;
        for(int j=20;j>=0;--j){
            if(p[up[u][j]].second-l+1<=m){
                u=up[u][j];re+=1<<j;
            }
        }
        u=up[u][0];
        if(p[u].second-l+1>m)ans=min(ans,re);
    }
    if(ans==1e9)ans=-2;
    cout<<ans+1;
    return 0;
}
Compilation message (stderr)
Main.cpp: In function 'int32_t main()':
Main.cpp:31:38: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   31 |     if(fopen("fire.inp","r")){freopen("fire.inp","r",stdin);freopen("fire.out","w",stdout);}
      |                               ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
Main.cpp:31:68: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   31 |     if(fopen("fire.inp","r")){freopen("fire.inp","r",stdin);freopen("fire.out","w",stdout);}
      |                                                             ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |