#include<bits/stdc++.h>
using namespace std;
using vi = vector<int>;
using pi = pair<int,int>;
typedef long long ll;
#define debug(x) cout << #x << " = " << x << "\n";
#define vdebug(a) cout << #a << " = "; for(auto x: a) cout << x << " "; cout << "\n";
const int MOD = 998244353;
const int MAXN = 4e5;
const int MAXK = 21;
ll n,m;
ll s[MAXN],e[MAXN];
int nextB[MAXN];
int lift[MAXN][MAXK];
void solve() {
cin >> n >> m;
for(int i=0; i<n; i++) cin >> s[i] >> e[i];
for(int i=0; i<n; i++) {
if(s[i] > e[i]) e[i] += m;
}
for(int i=0; i<n; i++) {
s[i+n] = s[i]+m;
e[i+n] = e[i]+m;
}
n*=2;
int cnt=0;
vector<pair<ll,ll>>intervals;
for(int i=0; i<n; i++) intervals.push_back({s[i], -e[i]});
sort(intervals.begin(), intervals.end());
ll maxEnd = -1;
for(auto interval : intervals) {
ll start = interval.first, end = -interval.second;
if(end <= maxEnd) continue;
maxEnd = end;
s[cnt] = start;
e[cnt] = end;
cnt++;
}
n=cnt;
vector<pair<ll,int>>Intervals;
for(int i=0; i<n; i++) Intervals.push_back({s[i], i});
sort(Intervals.begin(), Intervals.end());
int idx=0;
for(auto interval : Intervals) {
int i = interval.second;
while(idx < n) {
int intervalId = Intervals[idx].second;
if(s[intervalId] > e[i]) break;
idx++;
}
nextB[i] = Intervals[idx-1].second;
}
for(int i=0; i<n; i++) lift[i][0] = nextB[i];
for(int k=1; k<MAXK; k++) {
for(int i=0; i<n; i++) lift[i][k] = lift[lift[i][k-1]][k-1];
}
int ans=-1;
for(int i=0; i<n; i++) {
int TMP;
ll startTime = s[i];
int cntJumps=0,cur = i;
for(int j=MAXK-1; j>=0; j--) {
int jumpTo = lift[cur][j];
if(e[jumpTo] < startTime + m) {
cntJumps += (1 << j);
cur = jumpTo;
}
}
cntJumps++;
cur = lift[cur][0];
if(e[cur] < startTime+m) TMP = -1;
else TMP = cntJumps+1;
if(TMP == -1) continue;
if(ans == -1 or TMP < ans) ans=TMP;
}
cout << ans << endl;
}
int main(){
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int tc=1;
while(tc--) solve();
}