#include <bits/stdc++.h>


using namespace std;

unsigned long long mod = 998244353;

vector<unsigned long long> d1;

vector <int> t[5001];
int k,n;

void dfs(int node ,int f,vector<unsigned long long > &dp)
{

        dp.push_back(1);

    vector<unsigned long long > l;
    for(auto it : t[node])
        if(it != f)
    {
        l.clear();
        dfs(it,node,l);

    unsigned long long d[5001] = {0};

     for(int i = 0; i< l.size() ;++i)
            for(int j=0;j < dp.size();++j)
                    {
                        if(i+j+1<=k)
                    {
                        d[max(i+1,j)] += (dp[j]*l[i])%mod;
                        d[max(i+1,j)] %= mod;
                    }

                    d[j] += (dp[j]*l[i])%mod;
                    d[j] %= mod;

                    }

        dp.clear();
        for(int i =0 ;i<=k;++i)
            {
                if(d[i] == 0)
                    break;
            dp.push_back(d[i]);
            }
    }


}


int main()
{
    ios::sync_with_stdio(false); cin.tie(0);


    cin >>n >> k;
    int i ,x,y;
    for(i=1;i<n;++i)
    {
        cin >> x>> y;
        t[x].push_back(y);
        t[y].push_back(x);
    }

    dfs(1,0,d1);

    unsigned long long s = 0 ;
    for(i=0;i<d1.size();++i)
        {s += d1[i];
          s %= mod;
        }

    cout << s;
    return 0;
}
