#include <bits/stdc++.h>
const int N = 2e5;
#define ll long long
using namespace std;
int n, k;
vector<int> v[N+3];
int cnt[N+3], xxx = 0;
bool check[N+3];
int tree[N+3];
ll ans = 0;
void dfs(int t, int par) {
tree[t] = 1;
for (int res : v[t]){
if(res == par)continue;
if (!check[res]){
dfs(res, t);
tree[t] += tree[res];
}
}
}
int centroid1(int t, int par, int n) {
for (int res : v[t]){
if(res == par)continue;
if (!check[res] and tree[res] >= n/2){
return centroid1(res, t, n);
}
}
return t;
}
void dfs2(int t, int par, bool ok, int res) {
if(res > k)return;
xxx = max(xxx, res);
if(ok)cnt[res]++;
else ans += cnt[k - res];
for (int x : v[t]){
if(x == par)continue;
if (!check[x])dfs2(x, t, ok, res+1);
}
}
void centroid2(int t){
dfs(t, 0);
int res = centroid1(t, 0, tree[t]);
check[res] = true;
xxx = 0;
cnt[0] = 1;
for (int x : v[res]){
if (!check[x]) {
dfs2(x, res, false, 1);
dfs2(x, res, true, 1);
}
}
for(int i=1;i<=xxx;i++)cnt[i] = 0;
for (int x : v[res]){
if (!check[x])centroid2(x);
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>n>>k;
for (int i=1;i<=n-1;i++){
int x, y;
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
centroid2(1);
cout<<ans<<"\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CmNvbnN0IGludCBOID0gMmU1OwojZGVmaW5lIGxsIGxvbmcgbG9uZwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG4sIGs7CnZlY3RvcjxpbnQ+IHZbTiszXTsKaW50IGNudFtOKzNdLCB4eHggPSAwOwpib29sIGNoZWNrW04rM107CmludCB0cmVlW04rM107CmxsIGFucyA9IDA7Cgp2b2lkIGRmcyhpbnQgdCwgaW50IHBhcikgewogICAgdHJlZVt0XSA9IDE7Cglmb3IgKGludCByZXMgOiB2W3RdKXsKICAgICAgICBpZihyZXMgPT0gcGFyKWNvbnRpbnVlOwoJCWlmICghY2hlY2tbcmVzXSl7CiAgICAgICAgICAgIGRmcyhyZXMsIHQpOwoJCQl0cmVlW3RdICs9IHRyZWVbcmVzXTsKCQl9CiAgICB9Cgp9CgppbnQgY2VudHJvaWQxKGludCB0LCBpbnQgcGFyLCBpbnQgbikgewoJZm9yIChpbnQgcmVzIDogdlt0XSl7CiAgICAgICAgaWYocmVzID09IHBhciljb250aW51ZTsKCQlpZiAoIWNoZWNrW3Jlc10gYW5kIHRyZWVbcmVzXSA+PSBuLzIpewoJCQlyZXR1cm4gY2VudHJvaWQxKHJlcywgdCwgbik7CgkJfQoJfQoJcmV0dXJuIHQ7Cn0KCnZvaWQgZGZzMihpbnQgdCwgaW50IHBhciwgYm9vbCBvaywgaW50IHJlcykgewoJaWYocmVzID4gaylyZXR1cm47Cgl4eHggPSBtYXgoeHh4LCByZXMpOwoJaWYob2spY250W3Jlc10rKzsKCWVsc2UgYW5zICs9IGNudFtrIC0gcmVzXTsKCWZvciAoaW50IHggOiB2W3RdKXsKICAgICAgICBpZih4ID09IHBhciljb250aW51ZTsKCQlpZiAoIWNoZWNrW3hdKWRmczIoeCwgdCwgb2ssIHJlcysxKTsKCX0KfQoKdm9pZCBjZW50cm9pZDIoaW50IHQpewogICAgZGZzKHQsIDApOwoJaW50IHJlcyA9IGNlbnRyb2lkMSh0LCAwLCB0cmVlW3RdKTsKCWNoZWNrW3Jlc10gPSB0cnVlOwoJeHh4ID0gMDsKCWNudFswXSA9IDE7Cglmb3IgKGludCB4IDogdltyZXNdKXsKCQlpZiAoIWNoZWNrW3hdKSB7CgkJCWRmczIoeCwgcmVzLCBmYWxzZSwgMSk7CgkJCWRmczIoeCwgcmVzLCB0cnVlLCAxKTsKCQl9Cgl9Cglmb3IoaW50IGk9MTtpPD14eHg7aSsrKWNudFtpXSA9IDA7Cglmb3IgKGludCB4IDogdltyZXNdKXsKCQlpZiAoIWNoZWNrW3hdKWNlbnRyb2lkMih4KTsKCX0KfQoKaW50IG1haW4oKSB7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luLnRpZSgwKTsKCWNpbj4+bj4+azsKCWZvciAoaW50IGk9MTtpPD1uLTE7aSsrKXsKCQlpbnQgeCwgeTsKCQljaW4+Png+Pnk7CgkJdlt4XS5wdXNoX2JhY2soeSk7CgkJdlt5XS5wdXNoX2JhY2soeCk7Cgl9CgljZW50cm9pZDIoMSk7Cgljb3V0PDxhbnM8PCJcbiI7CglyZXR1cm4gMDsKfQo=