#include <bits/stdc++.h>
#pragma warning(disable : 4996)
using namespace std;
int n, m;
long long sum[2 * 311111];
int cnt[2 * 311111], c[2 * 311111];
pair<int, int> p[2 * 311111];
void add(int x, int d) {
  while (x < 2 * 311111) {
    sum[x] += d;
    x += ((x) & (-(x)));
  }
}
long long que(int x) {
  long long re = 0;
  while (x) {
    re += sum[x];
    x -= ((x) & (-(x)));
  }
  return re;
}
int main() {
  int t, a, b, x, y, z, ca = 1;
  scanf("%d%d", &(n), &(m));
  for (int i = (int)(1); i <= (int)(n); ++i) {
    scanf("%d%d", &(a), &(b));
    p[2 * i - 1] = make_pair(a, b);
    p[2 * i] = make_pair(b, a);
    cnt[a]++, cnt[b]++;
  }
  sort(p + 1, p + 2 * n + 1);
  for (int i = (int)(1); i <= (int)(2 * n); ++i) c[i] = p[i].first;
  long long ans = 0;
  int l, r;
  for (int i = (int)(1); i <= (int)(n); ++i) add(cnt[i] + 1, 1);
  for (int i = (int)(1); i <= (int)(n); ++i) {
    l = lower_bound(c + 1, c + 2 * n + 1, i) - c;
    r = upper_bound(c + 1, c + 2 * n + 1, i) - c;
    for (int j = (int)(l); j <= (int)(r - 1); ++j) {
      add(cnt[p[j].second] + 1, -1);
      add(cnt[p[j].second], 1);
      cnt[p[j].second]--;
    }
    ans += n - (m > cnt[i] ? que(m - cnt[i]) : 0);
    if (cnt[i] >= m - cnt[i]) ans--;
    for (int j = (int)(l); j <= (int)(r - 1); ++j) {
      add(cnt[p[j].second] + 1, -1);
      add(cnt[p[j].second] + 2, 1);
      cnt[p[j].second]++;
    }
  }
  printf("%I64d\n", (ans >> 1));
  return 0;
}
