// TEMPLATE
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
#define ordered_set_char tree<char, null_type, less<char>, rb_tree_tag, tree_order_statistics_node_update>
#define ordered_set_string tree<string, null_type, less<string>, rb_tree_tag, tree_order_statistics_node_update>
#define ordered_multiset tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update>
#define ordered_multiset_char tree<char, null_type, less_equal<char>, rb_tree_tag, tree_order_statistics_node_update>
#define ordered_multiset_string tree<string, null_type, less_equal<string>, rb_tree_tag, tree_order_statistics_node_update>
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
// #define int long long
#define ldouble long double
#define ll unsigned long long
// #define int int_fast32_t
#define endl '\n'
#define pii pair<int, int>
#define F first
#define S second
void solve()
{
int n, q;
cin >> n >> q;
vector<pii> vt;
for(int i = 0; i < n; i++){
int x, y;
cin >> x >> y;
vt.push_back({x, -y});
}
sort(vt.begin(), vt.end());
while(q--){
int a, b;
cin >> a >> b;
vector<pii> vt1;
for(int i = 0; i < n; i++){
if(vt[i].F >= a && -vt[i].S <= b){
vt1.push_back({vt[i].F, vt[i].S});
}
}
if(vt1.size() == 0){
cout << 0 << endl;
continue;
}
if(vt1.size() == 1){
cout << 1 << endl;
continue;
}
multiset<int> mt;
mt.insert(-vt1[0].S);
int n1 = vt1.size();
for(int i = 1; i < n1; i++){
auto it = mt.lower_bound(-vt1[i].S);
if(it != mt.begin()){
it--;
mt.erase(it);
}
mt.insert(-vt1[i].S);
}
cout << mt.size() << endl;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int T = 1;
// cin >> T;
while (T--)
solve();
//cerr << "\nTime elapsed: " << clock() * 1000.0 / CLOCKS_PER_SEC << " ms\n";
}
// i am heyder krutoy :moai