#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6;
vector<int> g[maxn];
long long a[maxn], c[maxn], pos[maxn], b[maxn];
long long x, y, n, i, j, cnt, K, p, ans;
long long lowbit(int o) { return o & (-o); }
void insert(int o) {
  while (o <= 2 * n) {
    c[o]++;
    o += lowbit(o);
  }
}
void remove(int o) {
  while (o <= 2 * n) {
    c[o]--;
    o += lowbit(o);
  }
}
long long find(int o) {
  long long re = 0;
  while (o) {
    re += c[o];
    o -= lowbit(o);
  }
  return re;
}
bool cmp(int A, int B) { return a[A] > a[B]; }
int main() {
  cin >> n >> p;
  for (i = 1; i <= n; i++) {
    cin >> x >> y;
    a[x]++;
    a[y]++;
    g[x].push_back(y);
    g[y].push_back(x);
    pos[i] = i;
  }
  sort(pos + 1, pos + n + 1, cmp);
  for (i = 1; i <= n; i++) insert(a[i] + 1);
  for (j = 1; j <= n; j++) {
    int u = pos[j];
    remove(a[u] + 1);
    if (a[u] >= p)
      ans += n - j;
    else {
      int len = g[u].size();
      for (i = 0; i < len; i++) {
        int v = g[u][i];
        if (b[v]) continue;
        remove(a[v] + 1);
        a[v]--;
        insert(a[v] + 1);
      }
      ans += n - j - find(p - a[u]);
      for (i = 0; i < len; i++) {
        int v = g[u][i];
        if (b[v]) continue;
        remove(a[v] + 1);
        a[v]++;
        insert(a[v] + 1);
      }
    }
    b[u] = 1;
  }
  cout << ans;
  return 0;
}
