#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 N = 1e6;
bool cmp(pi a, pi b) {
if(a.first != b.first) return a.first < b.first;
else return a.second > b.second;
}
void solve() {
int n, m;
cin >> n >> m;
vector<pi>rng(n), intervals;
for(int i=0; i<n; ++i) {
int s, e;
cin >> s >> e;
rng[i] = {s,e};
if(s>e) rng[i].second += m;
}
sort(rng.begin(), rng.end(), cmp);
int cnt = -1;
for(int i=0; i<rng.size(); ++i) {
int s = rng[i].first, e = rng[i].second;
if(cnt < e) intervals.push_back({s,e});
cnt = max(cnt, e);
}
n = (int)intervals.size();
for(pi tmp: intervals)
intervals.push_back({tmp.first+m, tmp.second+m});
n *= 2;
sort(intervals.begin(), intervals.end());
vi nxtBest(n);
int j = 0;
for(int i=0; i<n; ++i) {
while(j < n) {
if(intervals[i].second < intervals[j].first) break;
++j;
}
nxtBest[i] = j-1;
}
int nxt[n][30];
for(int i=n-1; i>=0; --i) {
nxt[i][0] = nxtBest[i];
for(int j=1; j<30; ++j) nxt[i][j] = nxt[nxt[i][j-1]][j-1];
}
int ans = n+1;
for(int i=0; i<n; ++i) {
int s = i, k = 1;
for(int j=29; j>=0; --j) {
if(intervals[nxt[s][j]].second - intervals[i].first < m) {
k += (1<<j);
s = nxt[s][j];
}
}
if(intervals[nxt[s][0]].second - intervals[i].first >= m) ans = min(ans, k+1);
}
if(ans == n+1) ans = -1;
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();
}