#include <bits/stdc++.h>
#define int long long
#define max max<int>
using namespace std;

constexpr int N = 1e5 + 5;

int n, k;
vector<int> children[N];
bool hasparent[N] = {false};
int tree[N] = {0};

int get(int i) {
    int s = 0;
    for (; i; i -= i & -i) {
        s += tree[i];
    }
    return s;
}

void update(int i, int x) {
    for (; i <= n; i += i & -i) {
        tree[i] += x;
    }
}

int timer;
int res;

void dfs(int u)
{
    ++timer;
    update(u, 1);

    int lo = max(u - k - 1, 0);
    int hi = min(u + k, n);
    res -= get(hi) - get(lo);

    for (int v : children[u]) {
        dfs(v);
    }

    res += get(hi) - get(lo);
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    // freopen("input.txt", "r", stdin);

    cin >> n >> k;

    for (int e = 1; e < n; e++) {
        int u, v;
        cin >> u >> v;

        children[u].push_back(v);
        hasparent[v] = true;
    }

    timer = 0;
    res = 0;
    for (int r = 1; r <= n; r++) {
        if (hasparent[r]) continue;
        dfs(r);
        break;
    }

    cout << res;

    return 0;
}