#include<bits/stdc++.h>
using namespace std;
#define maxt 1000005
#define maxn 25010
int n,t;
int dp[4000010];
struct node{
int l,r;
}ran[maxn];
bool cmp(node a,node b){
if(a.r!=b.r)return a.r<b.r;
else return a.l<b.l;
}
void pushup(int now){
dp[now]=min(dp[now<<1],dp[now<<1|1]);
}
void build(int now,int l,int r){
if(l==r){
dp[now]=1e9;
return ;
}else{
int mid=(l+r)>>1;
build(now<<1,l,mid);
build(now<<1|1,mid+1,r);
pushup(now);
}
}
void update(int now,int l,int r,int tar,int val){
if(l==r&&l==tar){
dp[now]=val;
return ;
}else{
int mid=(l+r)>>1;
if(tar<=mid&&tar>=l){
update(now<<1,l,mid,tar,val);
}else{
update(now<<1|1,mid+1,r,tar,val);
}
pushup(now);
}
}
int query(int now,int l,int r,int L,int R){
if(L<=l&&r<=R){
return dp[now];
}else{
int mid=(l+r)>>1;
int ans=1e9;
if(L<=mid){
ans=min(ans,query(now<<1,l,mid,L,R));
}
if(R>mid){
ans=min(ans,query(now<<1|1,mid+1,r,L,R));
}
return ans;
}
}
int main(){
cin>>n>>t;
build(1,0,t);
for(int i=1;i<=n;i++){
cin>>ran[i].l>>ran[i].r;
if(ran[i].l==1){
update(1,1,t,ran[i].r,1);
}
}
sort(ran+1,ran+n+1,cmp);
for(int i=1;i<=n;i++){
int p=min(query(1,1,t,ran[i].l-1,ran[i].r-1)+1,query(1,1,t,ran[i].r,ran[i].r));
update(1,1,t,ran[i].r,p);
}
int p=query(1,1,t,t,t);
if(t==1e9)cout<<-1;
else cout<<p;
return 0;
}