#include <bits/stdc++.h>
using namespace std;
#define forsn(i, s, n) for (int i = int(s); i < int(n); i++)
#define forn(i, n) forsn(i, 0, n)
#define dforsn(i, s, n) for (int i = int(n) - 1; i >= int(s); i--)
#define dforn(i, n) dforsn(i, 0, n)
using vi = vector<int>;
using ii = pair<int, int>;
using vii = vector<ii>;
using ll = long long;
using ld = long double;
using vll = vector<ll>;
using vb = vector<bool>;
using pll = pair<ll, ll>;
using i128 = __int128;
#define sz(x) int(x.size())
#define all(x) begin(x), end(x)
#define pb push_back
#define eb emplace_back
#define fst first
#define snd second
const int MOD = 998'244'353;
int mul(int a, int b) {
return int(1LL * a * b % MOD);
}
void add(int &x, int v) {
if ((x += v) >= MOD) x -= MOD;
}
void sub(int &x, int v) {
if ((x -= v) < 0) x += MOD;
}
vi mul(const vi &a, const vi &b) {
const int &n = sz(a);
vi c(n, 0);
int prefA = 0, prefB = 0;
int prev = 0;
forn(maxi, n) {
add(prefA, a[maxi]);
add(prefB, b[maxi]);
int curr = mul(prefA, prefB);
c[maxi] = curr; sub(c[maxi], prev);
prev = curr;
}
return c;
}
vi dfs(int u, const vector<vi> &adj, const int &k, int p = -1) {
const int n = sz(adj);
vector<vi> dpChilds;
for (int v : adj[u]) if (v != p) {
dpChilds.pb(dfs(v, adj, k, u));
}
const int m = sz(dpChilds);
if (m == 0) {
vi dp(k + 1);
dp[0] = 1;
if (k >= 1) dp[1] = 1;
return dp;
}
vector<vi> suff(m + 1);
suff[m] = vi(k + 1, 0);
suff[m][0] = 1;
dforn(i, m) suff[i] = mul(suff[i + 1], dpChilds[i]);
vi dp(k + 2, 0);
vi pref = vi(k + 1, 0);
pref[0] = 1;
forn(i, m) {
forn(j, k) add(pref[j + 1], pref[j]);
forn(j, k) add(suff[i + 1][j + 1], suff[i + 1][j]);
forn(maxi, k + 1) {
int left = min(k - maxi, maxi - 1);
int right = min(k - maxi, maxi);
int leftValue = left == -1 ? (i == 0 ? 1 : 0) : pref[left];
int rightValue = suff[i + 1][right];
int curr = mul(dpChilds[i][maxi], mul(leftValue, rightValue));
add(dp[maxi + 1], curr);
}
suff[i + 1].clear();
dforn(j, k) sub(pref[j + 1], pref[j]);
pref = mul(pref, dpChilds[i]);
dpChilds[i].clear();
}
if (p != -1) {
int total = 0;
forn(i, k + 2) add(total, dp[i]);
add(dp[0], total);
dp.pop_back();
}
return dp;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n, k;
cin >> n >> k;
vector<vi> adj(n);
forn(i, n - 1) {
int u, v;
cin >> u >> v;
--u, --v;
adj[u].pb(v);
adj[v].pb(u);
}
vi ret = dfs(0, adj, k);
int s = 0;
forn(i, k + 2) add(s, ret[i]);
cout << s << '\n';
return 0;
}