#include <bits/stdc++.h>
#define ll long long
#define ii pair<int, int>
#define st first
#define nd second
#define endl "\n"
#define all(v) v.begin(), v.end()
 
using namespace std;
 
const int MAXN = 1e6  + 5;
 
int n, k, Max[MAXN];
vector<int> s[MAXN];
 
struct FenwickTree{
    int fen[MAXN + 10];
    int n = 1000005;
 
    void update (int u, int val){
        for (; u <= n; u += (u & (-u))) fen[u] += val;
    }
 
    int get (int u){
        int ans = 0;
        for (; u; u -= (u & (-u))) ans += fen[u];
        return ans;
    }
 
    int get (int l, int r){
        return get(r) - get(l - 1);
    }
    
} d;
 
 
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
 
    cin >> n >> k;
 
    memset(Max, -1, sizeof(Max));
 
    for (int i = 1; i <= n; i++){
        int x, y;
        cin >> x >> y;
        Max[y] = max(Max[y], x);
        s[y].push_back(x);
 
        d.update(x, 1);
    }
 
    for (int i = (int)1e6; i >= 0; i--){
        Max[i] = max(Max[i + 1], Max[i]);
    }
 
 
    ll ans = 0;
    int pt = Max[1];
    int furthest = Max[1];
 
 
    for (int y = 1; y <= (int)1e6; y++){
        int x = Max[y];
        
        if (x == -1) break;
        int ins = (pt + 1 > x) ? 0 : d.get(pt + 1, x);
        while (pt && ins + d.get(pt, pt) <= k){
            int val = d.get(pt, pt);
            if (val) furthest = pt;
            ins += val;
            pt--;
        }
 
        if (ins == k){
            ans += furthest - pt;
        }
    
        for (auto x : s[y]){
            d.update(x, -1);
        }
 
 
    }
 
    cout << ans << endl;
}
