#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 n,m;
pair<int,int>ara[200023];
multiset<int>st;
map<int,pair<vector<int>,vector<int>>>mp;
int cev=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;
if(ara[i].sc==0)ara[i].sc=m;
}
sort(ara+1,ara+n+1,[&](const pair<int,int> &x,const pair<int,int> &y){
return x.sc-x.fr<y.sc-y.fr;
});
for(int i=1;i<=n;i++){
if(ara[i].sc<ara[i].fr){
int bas=ara[i].sc,son=ara[i].fr;
mp.clear();
st.clear();
for(int j=1;j<=n;j++){
if(ara[j].sc<ara[j].fr){
mp[0].fr.pb(ara[j].sc);
mp[ara[j].fr].fr.pb(m);
}
else{
mp[ara[j].fr].fr.pb(ara[j].sc);
}
}
st.insert(0);
mp[bas].sc.pb(0);
int ans=1;
mp[son];
while(mp.size()){
vector<int>&ekle=mp.begin()->sc.fr;
vector<int>&sil=mp.begin()->sc.sc;
if(mp.begin()->fr==son){
if(st.size())ans+=*st.begin();
else ans=1e9;
break;
}
for(int x:ekle){
if(st.size()){
int y=*st.begin()+1;
mp[x].sc.pb(y);
st.insert(y);
}
}
for(int x:sil){
st.erase(st.find(x));
}
mp.erase(mp.begin());
}
cev=min(cev,ans);
}
}
int bas=0,son=m;
mp.clear();
st.clear();
for(int j=1;j<=n;j++){
if(ara[j].sc<ara[j].fr){
mp[0].fr.pb(ara[j].sc);
mp[ara[j].fr].fr.pb(m);
}
else{
mp[ara[j].fr].fr.pb(ara[j].sc);
}
}
st.insert(0);
mp[bas].sc.pb(0);
int ans=0;
mp[son];
while(mp.size()){
vector<int>&ekle=mp.begin()->sc.fr;
vector<int>&sil=mp.begin()->sc.sc;
if(mp.begin()->fr==son){
if(st.size())ans+=*st.begin();
else ans=1e9;
break;
}
for(int x:ekle){
if(st.size()){
int y=*st.begin()+1;
mp[x].sc.pb(y);
st.insert(y);
}
}
for(int x:sil){
st.erase(st.find(x));
}
mp.erase(mp.begin());
}
cev=min(cev,ans);
if(cev==1e9)cev=-1;
cout<<cev<<endl;
}