#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
//英语 看博友分析 抄博友程序 抄的多 贪心 没掌握
struct nod{
int x;
int y;
};
bool cmp(nod a,nod b)//按左排序 背
{
if(a.x==b.x)
{
return a.y<b.y;
}else
{
return a.x<b.x;
}
}
int main()
{
int N,T;
cin>>N>>T;
vector<nod> ve;
for(int i=0;i<N;i++)
{
nod t;
cin>>t.x>>t.y;
ve.push_back(t);
}
sort(ve.begin(),ve.end(),cmp);
int i=0;
int jg=0;
int lim=0;//题意
while(i<N)//抄博友程序 程序结构 背
{
int ret=0 ;
while(ve[i].x<=lim+1 && i<N)//题意 程序结构 背
{
ret=max(ret,ve[i++].y);//抄博友程序
}
if(ret==0)
{
break;
}
jg++;
lim=max(lim,ret);
if(lim>=T)
{
break;
}
}
if(lim<T)
{
cout<<-1<<endl;
}else
{
cout<<jg<<endl;
}
return 0;
}