#include <bits/stdc++.h>
using namespace std;
int n,k,ans=0,timer=0,id[100005],tin[100005],tout[100005],arr[200005],bit[200005];
vector <int> ve[100005];
pair <int,pair<int,int>> p[100005];
void DFS(int u, int p)
{
tin[u]=++timer,arr[timer]=u;
for (int v : ve[u]) if (v!=p) DFS(v,u);
tout[u]=++timer,arr[timer]=u;
}
void UPDATE(int i, int v)
{
while (i<=timer) bit[i]+=v,i+=i&(-i);
return;
}
int GET(int l, int r)
{
l--;
int resl=0,resr=0;
while (l>0) resl+=bit[l],l-=l&(-l);
while (r>0) resr+=bit[r],r-=r&(-r);
return resr-resl;
}
signed main()
{
ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>k;
for (int i=1;i<n;i++)
{
int u,v;
cin>>u>>v;
ve[u].push_back(v),ve[v].push_back(u),id[v]++;
}
int x=n;
for (int i=1;i<=n;i++) if (id[i]==0) DFS(i,0);
for (int i=n;i>=1;i--) UPDATE(tin[i],1),UPDATE(tout[i],1),ans-=GET(tin[i],tout[i])/2;
for (int i=1;i<=2*n;i++) UPDATE(i,-1);
for (int i=1;i<=n;i++) UPDATE(tin[i],1),UPDATE(tout[i],1),ans-=GET(tin[i],tout[i])/2;
for (int i=1;i<=2*n;i++) UPDATE(i,-1);
for (int i=n;i>=1;i--)
{
while (x>=1 && x>=i-k) UPDATE(tin[x],1),UPDATE(tout[x],1),x--;
ans+=GET(tin[i],tout[i])/2;
}
x=1;
for (int i=1;i<=2*n;i++) UPDATE(i,-1);
for (int i=1;i<=n;i++)
{
while (x<=n && x<=i+k) UPDATE(tin[x],1),UPDATE(tout[x],1),x++;
ans+=GET(tin[i],tout[i])/2;
}
cout<<ans;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBuLGssYW5zPTAsdGltZXI9MCxpZFsxMDAwMDVdLHRpblsxMDAwMDVdLHRvdXRbMTAwMDA1XSxhcnJbMjAwMDA1XSxiaXRbMjAwMDA1XTsKdmVjdG9yIDxpbnQ+IHZlWzEwMDAwNV07CnBhaXIgPGludCxwYWlyPGludCxpbnQ+PiBwWzEwMDAwNV07CnZvaWQgREZTKGludCB1LCBpbnQgcCkKewogICAgdGluW3VdPSsrdGltZXIsYXJyW3RpbWVyXT11OwogICAgZm9yIChpbnQgdiA6IHZlW3VdKSBpZiAodiE9cCkgREZTKHYsdSk7CiAgICB0b3V0W3VdPSsrdGltZXIsYXJyW3RpbWVyXT11Owp9CnZvaWQgVVBEQVRFKGludCBpLCBpbnQgdikKewogICAgd2hpbGUgKGk8PXRpbWVyKSBiaXRbaV0rPXYsaSs9aSYoLWkpOwogICAgcmV0dXJuOwp9CmludCBHRVQoaW50IGwsIGludCByKQp7CiAgICBsLS07CiAgICBpbnQgcmVzbD0wLHJlc3I9MDsKICAgIHdoaWxlIChsPjApIHJlc2wrPWJpdFtsXSxsLT1sJigtbCk7CiAgICB3aGlsZSAocj4wKSByZXNyKz1iaXRbcl0sci09ciYoLXIpOwogICAgcmV0dXJuIHJlc3ItcmVzbDsKfQpzaWduZWQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpLGNpbi50aWUoMCksY291dC50aWUoMCk7CiAgICBjaW4+Pm4+Pms7CiAgICBmb3IgKGludCBpPTE7aTxuO2krKykKICAgIHsKICAgICAgICBpbnQgdSx2OwogICAgICAgIGNpbj4+dT4+djsKICAgICAgICB2ZVt1XS5wdXNoX2JhY2sodiksdmVbdl0ucHVzaF9iYWNrKHUpLGlkW3ZdKys7CiAgICB9CiAgICBpbnQgeD1uOwogICAgZm9yIChpbnQgaT0xO2k8PW47aSsrKSBpZiAoaWRbaV09PTApIERGUyhpLDApOwogICAgZm9yIChpbnQgaT1uO2k+PTE7aS0tKSBVUERBVEUodGluW2ldLDEpLFVQREFURSh0b3V0W2ldLDEpLGFucy09R0VUKHRpbltpXSx0b3V0W2ldKS8yOwogICAgZm9yIChpbnQgaT0xO2k8PTIqbjtpKyspIFVQREFURShpLC0xKTsKICAgIGZvciAoaW50IGk9MTtpPD1uO2krKykgVVBEQVRFKHRpbltpXSwxKSxVUERBVEUodG91dFtpXSwxKSxhbnMtPUdFVCh0aW5baV0sdG91dFtpXSkvMjsKICAgIGZvciAoaW50IGk9MTtpPD0yKm47aSsrKSBVUERBVEUoaSwtMSk7CiAgICBmb3IgKGludCBpPW47aT49MTtpLS0pCiAgICB7CiAgICAgICAgd2hpbGUgKHg+PTEgJiYgeD49aS1rKSBVUERBVEUodGluW3hdLDEpLFVQREFURSh0b3V0W3hdLDEpLHgtLTsKICAgICAgICBhbnMrPUdFVCh0aW5baV0sdG91dFtpXSkvMjsKICAgIH0KICAgIHg9MTsKICAgIGZvciAoaW50IGk9MTtpPD0yKm47aSsrKSBVUERBVEUoaSwtMSk7CiAgICBmb3IgKGludCBpPTE7aTw9bjtpKyspCiAgICB7CiAgICAgICAgd2hpbGUgKHg8PW4gJiYgeDw9aStrKSBVUERBVEUodGluW3hdLDEpLFVQREFURSh0b3V0W3hdLDEpLHgrKzsKICAgICAgICBhbnMrPUdFVCh0aW5baV0sdG91dFtpXSkvMjsKICAgIH0KICAgIGNvdXQ8PGFuczsKICAgIHJldHVybiAwOwp9