#include <bits/stdc++.h>

#define FAST ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define maxn 200005
#define pb push_back

using namespace std;

int mini[maxn], maxi[maxn];

int koliko[maxn][21];

int manji20(int a[], int n){
    for(int i = 1; i <= n; i++){
        if(a[i] > 20) return 0;
    }
    return 1;
}

int jednaki(int a[], int b[], int n){
    for(int i = 1; i <= n; i++){
        if(a[i] != b[i]) return 0;
    }
    return 1;
}

int main()
{
    FAST

    int n, m;
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        cin >> mini[i] >> maxi[i];
    }
    if(n <= 1000 && m <= 1000){
        int l, r, x;
        for(int i = 0; i < m; i++){
            int rez = 0;
            cin >> l >> r >> x;
            for(int j = l; j <= r; j++){
                if(x >= mini[j] && x <= maxi[j])
                    rez++;
            }
            cout << rez << endl;
        }
    }
    else if(manji20(maxi, n)){
        for(int i = 0; i < 21; i++){
            koliko[0][i] = 0;
        }
        for(int i = 1; i <= n; i++){
            for(int j = 0; j < mini[i]; j++){
                koliko[i][j] = koliko[i - 1][j];
            }
            for(int j = mini[i]; j <= maxi[i]; j++){
                koliko[i][j] = koliko[i - 1][j] + 1;
            }
            for(int j = maxi[i] + 1; j < 21; j++){
                koliko[i][j] = koliko[i - 1][j];
            }
        }
        for(int i = 1; i <= m; i++){
            int l, r, x;
            cin >> l >> r >> x;
            cout << koliko[r][x] - koliko[l - 1][x] << endl;
        }
    }
    else if(jednaki(mini, maxi, n)){
        map<int, vector<int> > mapa;
        for(int i = 1; i <= n; i++){
            mapa[mini[i]].pb(i);
        }
        for(int i = 1; i <= m; i++){
            int l, r, x;
            cin >> l >> r >> x;
            if(mapa[x].empty()){
                cout << "0" << endl;
                continue;
            }
            int pozicija1 = lower_bound(mapa[x].begin(), mapa[x].end(), l) - mapa[x].begin();
            int pozicija2 = upper_bound(mapa[x].begin(), mapa[x].end(), r) - mapa[x].begin();
            cout << pozicija2 - pozicija1 << endl;
        }
    }
    else{
        vector<int> brojevi;
        map<int, int> mapa;
        for(int i = 1; i <= n; i++){
            brojevi.pb(mini[i]);
            brojevi.pb(maxi[i]);
            mapa[maxi[i]] = i;
        }
        sort(brojevi.begin(), brojevi.end());
        for(int i = 1; i <= m; i++){
            int l, r, x;
            cin >> l >> r >> x;
            int pozicija = lower_bound(brojevi.begin(), brojevi.end(), x) - brojevi.begin();
            if(pozicija == 0){
                if(brojevi[pozicija] != x){
                    cout << "0" << endl;
                    continue;
                }
            }
            if(lower_bound(brojevi.begin(), brojevi.end(), x) == brojevi.end()){
                cout << "0" << endl;
                continue;
            }
            if(pozicija % 2 == 0){
                if(brojevi[pozicija] == x)
                    pozicija++;
                else{
                    cout << "0" << endl;
                    continue;
                }
            }
            int indeks = mapa[brojevi[pozicija]];
            if(indeks >= l && indeks <= r){
                cout << "1" << endl;
            }
            else{
                cout << "0" << endl;
            }
        }
    }
    return 0;
}