#include<bits/stdc++.h>
typedef long long ll;
#define pb push_back
#define fr first
#define sc second
#define endl '\n'
using namespace std;
#define mid ((left+right)>>1)
int m;
struct Seg{
int n;
vector<pair<int,int>>tree,arr;
void build(int node=1,int left=0,int right=-1){
if(right==-1)right=n-1;
if(left==right){
tree[node]=arr[left];
return;
}
build(node*2,left,mid);build(node*2+1,mid+1,right);
tree[node]=max(tree[node*2],tree[node*2+1]);
}
void init(vector<pair<int,int>>Arr){
arr=Arr;
n=arr.size();
tree.resize(n<<2);
build();
}
int l,r;
pair<int,int> qu(int node=1,int left=0,int right=-1){
if(right==-1)right=n-1;
if(left>=l&&right<=r)return tree[node];
if(left>r||right<l)return{-1e9,-1};
return max(qu(node*2,left,mid),qu(node*2+1,mid+1,right));
}
pair<int,int> query(int left,int right){
l=left;r=right;
if(l>r){
r=n-1;
pair<int,int> res=qu();
r=right;
l=0;
pair<int,int>res2=qu();
res=max(res,{res2.fr+m,res2.sc});
return res;
}
return qu();
}
};
int n,k=0;
map<int,int>mp;
pair<int,int>ara[200023];
int nex[200023];
int bin[200023][18];
int dp[200023][18];
Seg seg;
int ans=1e9;
signed main(){
ios_base::sync_with_stdio(23^23);cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>ara[i].fr>>ara[i].sc;
mp[ara[i].fr]=0;
mp[ara[i].sc]=0;
}
for(auto&[a,b]:mp){
b=k++;
}
{
vector<pair<int,int>>arr(k,{-1e9,-1});
for(int i=1;i<=n;i++){
int dis=ara[i].sc-ara[i].fr;
if(dis<0)dis+=m;
pair<int,int>p={ara[i].fr+dis,i};
arr[mp[ara[i].fr]]=max(arr[mp[ara[i].fr]],p);
}
seg.init(arr);
}
for(int i=1;i<=n;i++){
int l=mp[ara[i].fr],r=mp[ara[i].sc];
bin[i][0]=seg.query(l,r).sc;
//cerr<<bin[i][0]<<" ";
int x=bin[i][0];
if(x==i)continue;
int a=ara[i].fr,b=ara[i].sc,c=ara[x].fr,d=ara[x].sc;
if(ara[i].fr>ara[i].sc)b+=m;
if(ara[x].fr>ara[x].sc)d+=m;
vector<int>v={a,b,c,d};
sort(v.begin(),v.end());
if(v[0]==a&&v[2]==b&&a+m<=v[3]){
cout<<2<<endl;
return 0;
}
}
//cerr<<endl;
for(int i=1;i<18;i++){
for(int j=1;j<=n;j++){
bin[j][i]=bin[bin[j][i-1]][i-1];
dp[j][i]=dp[j][i-1];
if(dp[j][i])continue;
if(dp[bin[j][i-1]][i-1]){
dp[j][i]=1;
continue;
}
int x=bin[j][i-1];
if(x==j)continue;
int a=ara[j].fr,b=ara[x].sc,c=ara[x].fr,d=ara[bin[j][i]].sc;
if(a>b)b+=m;
if(c>d)d+=m;
vector<int>v={a,b,c,d};
sort(v.begin(),v.end());
if(v[0]==a&&v[2]==b&&a+m<=v[3]){
dp[j][i]=1;
}
}
}
/*for(int i=1;i<=n;i++){
cerr<<i<<": ";
for(int j=0;j<3;j++){
cerr<<dp[i][j]<<" ";
}
cerr<<endl;
}*/
for(int i=1;i<=n;i++){
int pos=i,dis=1;
for(int j=18-1;j>=0;j--){
if(dp[pos][j]){
ans=min(ans,dis+(1<<j));
continue;
}
int x=bin[pos][j];
if(x==pos)continue;
int a=ara[i].fr,b=ara[pos].sc,c=ara[pos].fr,d=ara[x].sc;
if(a>b)b+=m;
if(c>d)d+=m;
vector<int>v={a,b,c,d};
sort(v.begin(),v.end());
if(v[0]==a&&v[2]==b&&a+m<=v[3]){
ans=min(ans,dis+(1<<j));
continue;
}
dis+=(1<<j);
pos=bin[pos][j];
}
}
if(ans==1e9)ans=-1;
cout<<ans<<endl;
}