This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int mod=(int)1e9+7;
int p[900003][23];
vector<int>lol;
void solve()
{
    int n,m;
    cin>>n>>m;
    vector<pair<int,int>>arr;
    vector<int>hi;
    for(int i=0;i<n;i++)
    {
        int a,b;
        cin>>a>>b;
        hi.push_back(a);
        hi.push_back(b);
        hi.push_back(a+1);
        hi.push_back(b+1);
        arr.push_back({a,b});
    }
    hi.push_back(m);
    hi.push_back(m+1);
    sort(hi.begin(),hi.end());
    hi.erase(unique(hi.begin(),hi.end()),hi.end());
    m=lower_bound(hi.begin(),hi.end(),m)-hi.begin();
    for(int i=0;i<n;i++)
    {
        arr[i].first=lower_bound(hi.begin(),hi.end(),arr[i].first)-hi.begin();
        arr[i].second=lower_bound(hi.begin(),hi.end(),arr[i].second)-hi.begin();
    }
    // for(auto i:arr)cout<<i.first<<" "<<i.second<<endl;
    for(int i=0;i<n;i++)
    {
        if(arr[i].first>arr[i].second)arr[i].second+=m;
        p[arr[i].first][0]=max(p[arr[i].first][0],arr[i].second+1);
    }
    for(int i=1;i<2*m;i++)p[i][0]=max(p[i-1][0],p[i][0]);
    for(int i=1;i<=20;i++)
        for(int j=0;j<2*m;j++)
            p[j][i]=p[p[j][i-1]][i-1];
    int fans=1e9;
    for(int i=0;i<m;i++)
    {
        int cnt=0,cur=i;
        for(int j=20;j>=0;j--)
        {
            if(p[cur][j]<=i+m)
            {
                cur=p[cur][j];
                cnt+=(1ll<<j);
            }
        }
        if(p[cur][0]<=i+m)continue;
        cnt++;
        // cout<<i<<" "<<cnt<<" "<<cur<<" "<<p[cur][0]<<" "<<p[i][0]<<endl;
        fans=min(fans,cnt);
    }
    if(fans==1e9)cout<<-1<<endl;
    else cout<<fans<<endl;
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int t=1;
    // cin>>t;
    while(t--)
        solve();
}
| # | 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... |