#include <bits/stdc++.h>
using namespace std;
int n, p;
vector<int> ve[310000];
int use[310000];
int tr[310000];
int lowbit(int x) { return x & (-x); }
void add(int id, int x) {
  if (id == 0) {
    tr[0] += x;
    return;
  }
  while (id <= n) {
    tr[id] += x;
    id += lowbit(id);
  }
}
int sum(int id) {
  int re = 0;
  while (id > 0) {
    re += tr[id];
    id -= lowbit(id);
  }
  return re;
}
int main() {
  int i, x, y, l, j;
  while (scanf("%d%d", &n, &p) != EOF) {
    for (i = 1; i <= n; i++) ve[i].clear();
    memset(use, 0, sizeof(use));
    memset(tr, 0, sizeof(tr));
    for (i = 1; i <= n; i++) {
      scanf("%d%d", &x, &y);
      use[x]++, use[y]++;
      ve[x].push_back(y);
      ve[y].push_back(x);
    }
    for (i = 1; i <= n; i++) {
      add(use[i], 1);
    }
    long long ans = 0;
    int ix;
    for (i = 1; i <= n; i++) {
      l = ve[i].size();
      add(use[i], -1);
      for (j = 0; j < l; j++) {
        add(use[ve[i][j]], -1);
        use[ve[i][j]]--;
        add(use[ve[i][j]], 1);
      }
      if (p - use[i] > 0) {
        ans += sum(n) - sum(p - use[i] - 1);
      } else {
        ans += sum(n) + tr[0];
      }
      for (j = 0; j < l; j++) {
        add(use[ve[i][j]], -1);
        use[ve[i][j]]++;
        add(use[ve[i][j]], 1);
      }
      add(use[i], 1);
    }
    printf("%I64d\n", ans / 2);
  }
  return 0;
}
