#include<bits/stdc++.h>
using namespace std;
using PII = pair<int, int>;
const int N = 1e5 + 10, INF = 0x3f3f3f3f;
int st, ed, n, res;
bool success;
vector<PII> v;
int main() {
cin >> st >> ed >> n;
for (int i = 0;i < n;i++) {
int a, b;cin >> a >> b;
v.push_back({ a,b });
}
sort(v.begin(), v.end());
for (int i = 0;i < n;i++) {
int j = i, r = ~INF;
while (j < n && v[j].first <= st) {//获取能够覆盖线性区间st的具备最大右侧端点的区间
r = max(r, v[j].second);
j++;
}
if (r < st) break;//如果没有一个区间能够覆盖st,则无解
st = r;//否则更新线性区间的起始位置
res++;
if (r >= ed) {//直到线性区间尾部被覆盖
success = 1;
break;
}
i = j - 1;
}
if (!success) cout << -1;
else cout << res;
}