#include <bits/stdc++.h>
typedef long long ll;
#define MOD 998244353

using namespace std;

int n, k, dp[5000][5001], pf[5000][5001];
vector<int> g[5000];

int mul(int a, int b)
{
    a%=MOD, b%=MOD;
    return ((ll)a*b)%MOD;
}

void dfs(int x, int p)
{
    for(int i: g[x])
        if(i!=p)
            dfs(i,x), dp[x][0] = mul(dp[x][0],pf[i][k]);
    pf[x][0] = dp[x][0];
    for(int i = 1; i<=k; i++)
    {
        if(2*(i-1)+2<=k)
        {
            //Any branch can equal i
            int res1 = 1, res2 = 1;
            for(int v: g[x])
                if(v!=p)
                    res1 = mul(res1,(pf[v][i-1]+pf[v][k])%MOD), res2 = mul(res2,(i>1?pf[v][i-2]:0)+pf[v][k]);
            dp[x][i] = (res1-res2+MOD)%MOD;
        }
        else
        {
            //Exactly one branch can equal i
            vector<int> sf;
            for(int j = g[x].size()-1, prod = 1; j>=0; j--)
                if(g[x][j]!=p)
                    sf.push_back(prod), prod = mul(prod,(k-i-1>=0?pf[g[x][j]][k-i-1]:0)+pf[g[x][j]][k]);
            for(int j = 0, prod = 1; j<g[x].size(); j++)
                if(g[x][j]!=p)
                    dp[x][i] = (dp[x][i]+mul(mul(prod,dp[g[x][j]][i-1]),sf.back()))%MOD, prod = mul(prod,(k-i-1>=0?pf[g[x][j]][k-i-1]:0)+pf[g[x][j]][k]), sf.pop_back();
        }
        pf[x][i] = (pf[x][i-1]+dp[x][i])%MOD;
    }
}

int main()
{
    cin >> n >> k;
    for(int i = 0, u, v; i<n-1; i++)
    {
        cin >> u >> v;
        g[u-1].push_back(v-1);
        g[v-1].push_back(u-1);
    }
    for(int i = 0; i<n; i++)
        dp[i][0] = 1;
    dfs(0,0);
    cout << pf[0][k] << endl;
}