#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;
}