#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
int n,k;
vector<int> graph[N];
int subtree[N],cnt[N]{1};
int ans=0,mx_depth;
bool check[N];
int sz(int node,int par)
{
subtree[node]=1;
for(int a:graph[node]){
if(!check[a]&&a!=par) subtree[node]+=sz(a,node);
}
return subtree[node];
}
int centroid(int d,int node,int par)
{
for(int a:graph[node]){
if(!check[a]&&a!=par&&subtree[a]>=d) return centroid(d,a,node);
}
return node;
}
void num(int node,int par,bool f,int d)
{
if(d>k) return;
mx_depth=max(mx_depth,d);
if(f) cnt[d]++;
else ans+=cnt[k-d];
for(int a:graph[node]){
if(!check[a]&&a!=par) num(a,node,f,d+1);
}
}
void cdp(int node)
{
int cen=centroid(sz(node,0)/2,node,0);
check[cen]=1;
mx_depth=0;
for(int a:graph[cen]){
if(!check[a]){
num(a,cen,0,1);
num(a,cen,1,1);
}
}
fill(cnt+1,cnt+mx_depth+1,0);
for(int a:graph[cen]){
if(!check[a]) cdp(a);
}
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
for(int a=0;a<n-1;a++){
int x,y;
cin>>x>>y;
graph[x].push_back(y);
graph[y].push_back(x);
}
cdp(1);
cout<<ans;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpbnQgbG9uZyBsb25nCmNvbnN0IGludCBOPTJlNSs1OwppbnQgbixrOwp2ZWN0b3I8aW50PiBncmFwaFtOXTsKaW50IHN1YnRyZWVbTl0sY250W05dezF9OwppbnQgYW5zPTAsbXhfZGVwdGg7CmJvb2wgY2hlY2tbTl07CmludCBzeihpbnQgbm9kZSxpbnQgcGFyKQp7CiAgICBzdWJ0cmVlW25vZGVdPTE7CiAgICBmb3IoaW50IGE6Z3JhcGhbbm9kZV0pewogICAgICAgIGlmKCFjaGVja1thXSYmYSE9cGFyKSBzdWJ0cmVlW25vZGVdKz1zeihhLG5vZGUpOwogICAgfQogICAgcmV0dXJuIHN1YnRyZWVbbm9kZV07Cn0KaW50IGNlbnRyb2lkKGludCBkLGludCBub2RlLGludCBwYXIpCnsKICAgIGZvcihpbnQgYTpncmFwaFtub2RlXSl7CiAgICAgICAgaWYoIWNoZWNrW2FdJiZhIT1wYXImJnN1YnRyZWVbYV0+PWQpIHJldHVybiBjZW50cm9pZChkLGEsbm9kZSk7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKfQp2b2lkIG51bShpbnQgbm9kZSxpbnQgcGFyLGJvb2wgZixpbnQgZCkKewogICAgaWYoZD5rKSByZXR1cm47CiAgICBteF9kZXB0aD1tYXgobXhfZGVwdGgsZCk7CiAgICBpZihmKSBjbnRbZF0rKzsKICAgIGVsc2UgYW5zKz1jbnRbay1kXTsKICAgIGZvcihpbnQgYTpncmFwaFtub2RlXSl7CiAgICAgICAgaWYoIWNoZWNrW2FdJiZhIT1wYXIpIG51bShhLG5vZGUsZixkKzEpOwogICAgfQp9CnZvaWQgY2RwKGludCBub2RlKQp7CiAgICBpbnQgY2VuPWNlbnRyb2lkKHN6KG5vZGUsMCkvMixub2RlLDApOwogICAgY2hlY2tbY2VuXT0xOwogICAgbXhfZGVwdGg9MDsKICAgIGZvcihpbnQgYTpncmFwaFtjZW5dKXsKICAgICAgICBpZighY2hlY2tbYV0pewogICAgICAgICAgICBudW0oYSxjZW4sMCwxKTsKICAgICAgICAgICAgbnVtKGEsY2VuLDEsMSk7CiAgICAgICAgfQogICAgfQogICAgZmlsbChjbnQrMSxjbnQrbXhfZGVwdGgrMSwwKTsKICAgIGZvcihpbnQgYTpncmFwaFtjZW5dKXsKICAgICAgICBpZighY2hlY2tbYV0pIGNkcChhKTsKICAgIH0KfQpzaWduZWQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwogICAgY2luPj5uPj5rOwogICAgZm9yKGludCBhPTA7YTxuLTE7YSsrKXsKICAgICAgICBpbnQgeCx5OwogICAgICAgIGNpbj4+eD4+eTsKICAgICAgICBncmFwaFt4XS5wdXNoX2JhY2soeSk7CiAgICAgICAgZ3JhcGhbeV0ucHVzaF9iYWNrKHgpOwogICAgfQogICAgY2RwKDEpOwogICAgY291dDw8YW5zOwp9Cg==