#include<cstdio>
#include<algorithm>
using namespace std;
struct interval
{
int in;
int sf;
};
bool cmp(interval a, interval b)
{
return a.in<b.in;
}
interval v[1000];
int max(int a, int b)
{
if(a>b)return a;
if(b>a)return b;
return a;
}
int main()
{
freopen("acoperire.in","r",stdin);
freopen("acoperire.out","w",stdout);
int st,dr,n;
scanf("%d%d",&st,&dr); // capetele intervalului
scanf("%d",&n); // nr intervale mici
for(int i=1;i<=n;i++)
scanf("%d%d",&v[i].in,&v[i].sf); // intervale mici
int reper=st, departe=st-1,nr=1;
sort(v+1,v+n+1,cmp);
bool ok=0;
for(int i=1;i<=n;i++)
{
if(v[i].in<=reper)
departe=max(departe,v[i].sf);
else
if(v[i].in>departe)
{
printf("-1");
ok=1;
break;
}
else
{
nr++;
reper=departe;
departe=v[i].sf;
}
if(departe>=dr)
break;
}
if(ok==0)
if(v[n].sf<st)
{
printf("-1");
ok=1;
}
if(ok==0)
printf("%d",nr);
return 0;
}