#include <bits/stdc++.h>
using namespace std;
vector<int> adj[300001];
int bit[300002];
int cnt[300002];
void update(int idx, int val) {
  while (idx <= 300001) {
    bit[idx] += val;
    idx += idx & -idx;
  }
}
int get(int idx) {
  int sum = 0;
  while (idx > 0) {
    sum = sum + bit[idx];
    idx -= idx & -idx;
  }
  return sum;
}
int main() {
  memset(cnt, 0, sizeof cnt);
  int n, p;
  scanf("%d", &n);
  scanf("%d", &p);
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d", &x);
    scanf("%d", &y);
    x--;
    y--;
    cnt[x]++;
    cnt[y]++;
    adj[x].push_back(y);
    adj[y].push_back(x);
  }
  for (int i = 0; i < n; i++) {
    update(cnt[i] + 1, 1);
  }
  long long int ans = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < adj[i].size(); j++) {
      int idx = adj[i][j];
      update(cnt[idx] + 1, -1);
      cnt[idx]--;
      update(cnt[idx] + 1, 1);
    }
    int val = cnt[i];
    if (val >= p) {
      ans = ans + n - 1;
    } else {
      ans = ans + get(300001) - get(p - val);
      if (val >= p - val) {
        ans--;
      }
    }
    for (int j = 0; j < adj[i].size(); j++) {
      int idx = adj[i][j];
      update(cnt[idx] + 1, -1);
      cnt[idx]++;
      update(cnt[idx] + 1, 1);
    }
  }
  printf("%lld\n", ans / 2);
}
