#include <bits/stdc++.h>
using namespace std;
#define int long long
#define F first
#define S second
#define pb push_back
#define ins insert
#define pf push_front
#define lb lower_bound
#define ub upper_bound
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
#define srt(p) sort(p.begin() , p.end())
#define rvr(p) reverse(p.begin() , p.end())
#define all(p) p.begin() , p.end()
//#pragma GCC optimize("Ofast , unroll-loops")
//#pragma GCC target("avx2")
const int INF = 1e18 , MOD = 1e9 + 7 , MAX = 2e6 + 5;
int dx[8] = {-1 , -1 , -1 , 0 , 0 , 1 , 1 , 1};
int dy[8] = {-1 , 0 , 1 , -1 , 1 , -1 , 0 , 1};
bool is_prime(int n) {
if(n == 1 or n == 0) return false;
if(n == 2) return true;
if(n % 2 == 0) return false;
for(int i = 3; i <= sqrt(n); i += 2) {
if(n % i == 0) return false;
}
return true;
}
struct Edge {
int u , v , w;
};
void solve(){
int n , q;
cin >> n >> q;
vector<pair<int , int>> vt;
for(int i = 0; i < n; ++ i) {
int a, b; cin >> a >> b;
vt.pb({a, -b});
}
srt(vt);
while(q--) {
int A , B;
cin >> A >> B;
vector<pair<int , int>> doll;
for(int i = 0; i < n; ++ i) {
if(vt[i].F >= A && -vt[i].S <= B) {
doll.pb({vt[i].F , -vt[i].S});
}
}
if(doll.size() == 1 || doll.size() == 0) {
cout << doll.size() << endl;
continue;
}
multiset<int> st;
for(int i = 0; i < doll.size(); ++ i) {
if(i == 0) {
st.ins(doll[i].S);
continue;
}
else {
auto it = st.lower_bound(doll[i].S);
if(it == st.begin()) {
st.ins(doll[i].S);
continue;
}
it--;
st.erase(it);
}
st.ins(doll[i].S);
}
cout << st.size() << endl;
}
}
signed main() {
// freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
//cout.tie(nullptr);
int t = 1;
//cin >> t;
while(t--) {
solve();
}
// cerr << endl << "Time elapsed: " << clock() * 1000.0 / CLOCKS_PER_SEC << " ms" << endl;
}