#include <cstdio>
#include <vector>
using namespace std;
int const N = 2e5 + 10;
vector <int> e[N];
bool has_p[N];
int n, k;
long long tot;
struct FenwickTree {
int x[N], n;
int static const OFFSET = 5;
FenwickTree(int n=N):n(n) {}
void add(int p, int o) {
for (p+=OFFSET; p<n; p+=p&-p) x[p] += o;
}
int sum(int p) {
int ret = 0;
for (p+=OFFSET; p>0; p-=p&-p) ret += x[p];
return ret;
}
} T;
void dfs(int x) {
tot += T.sum(x+k) - T.sum(x-k-1);
T.add(x, 1);
for (int i=(int)e[x].size()-1; i>=0; --i) dfs(e[x][i]);
T.add(x, -1);
}
int main() {
scanf("%d%d", &n, &k);
for (int i=1,p,c; i<n; ++i) {
scanf("%d%d", &p, &c);
e[p].push_back(c);
has_p[c] = true;
}
int root = -1;
for (root=1; root<=n&&has_p[root]; ++root);
dfs(root);
printf("%lld\n", tot);
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBjb25zdCBOID0gMmU1ICsgMTA7Cgp2ZWN0b3IgPGludD4gZVtOXTsKYm9vbCBoYXNfcFtOXTsKaW50IG4sIGs7CmxvbmcgbG9uZyB0b3Q7CgpzdHJ1Y3QgRmVud2lja1RyZWUgewogICAgaW50IHhbTl0sIG47CiAgICBpbnQgc3RhdGljIGNvbnN0IE9GRlNFVCA9IDU7CgogICAgRmVud2lja1RyZWUoaW50IG49Tik6bihuKSB7fQoKICAgIHZvaWQgYWRkKGludCBwLCBpbnQgbykgewogICAgICAgIGZvciAocCs9T0ZGU0VUOyBwPG47IHArPXAmLXApIHhbcF0gKz0gbzsKICAgIH0KICAgIGludCBzdW0oaW50IHApIHsKICAgICAgICBpbnQgcmV0ID0gMDsKICAgICAgICBmb3IgKHArPU9GRlNFVDsgcD4wOyBwLT1wJi1wKSByZXQgKz0geFtwXTsKICAgICAgICByZXR1cm4gcmV0OwogICAgfQp9IFQ7Cgp2b2lkIGRmcyhpbnQgeCkgewogICAgdG90ICs9IFQuc3VtKHgraykgLSBULnN1bSh4LWstMSk7CiAgICBULmFkZCh4LCAxKTsKICAgIGZvciAoaW50IGk9KGludCllW3hdLnNpemUoKS0xOyBpPj0wOyAtLWkpIGRmcyhlW3hdW2ldKTsKICAgIFQuYWRkKHgsIC0xKTsKfQoKaW50IG1haW4oKSB7CiAgICBzY2FuZigiJWQlZCIsICZuLCAmayk7CiAgICBmb3IgKGludCBpPTEscCxjOyBpPG47ICsraSkgewogICAgICAgIHNjYW5mKCIlZCVkIiwgJnAsICZjKTsKICAgICAgICBlW3BdLnB1c2hfYmFjayhjKTsKICAgICAgICBoYXNfcFtjXSA9IHRydWU7CiAgICB9CiAgICBpbnQgcm9vdCA9IC0xOwogICAgZm9yIChyb290PTE7IHJvb3Q8PW4mJmhhc19wW3Jvb3RdOyArK3Jvb3QpOwogICAgZGZzKHJvb3QpOwogICAgcHJpbnRmKCIlbGxkXG4iLCB0b3QpOwogICAgcmV0dXJuIDA7Cn0K