#include <bits/stdc++.h>
using namespace std;


using ll = long long;
using VI = vector<int>;
using VVI = vector<VI>;
using VL = vector<ll>;
using VVL = vector<VL>;


const ll MOD = 998244353;


int n, k, mig;
VVI G;
VVL R;


void suma(ll& x, ll y) {
  x = (x + y)%MOD;
}


void mult(ll& x, ll y) {
  x = (x*y)%MOD;
}


void dfs(int x, int p) {
  R[x][0] = 1;

  for (int y : G[x])
    if (y != p) {
      dfs(y, x);

      ll toty = 0;
      for (int d = 0; d <= k; ++d) suma(toty, R[y][d]);
      VL C = R[x];

      for (int d = 0; d <= k; ++d) mult(R[x][d], toty);

      ll totx = 0;
      for (int dy = k - 1; dy >= mig; --dy) {
        int dx = k - 1 - dy;
        suma(totx, C[dx]);
        suma(R[x][dy+1], R[y][dy]*totx);
      }

      toty = 0;
      for (int dx = k - 1; dx > mig; --dx) {
        int dy = k - 1 - dx;
        suma(toty, R[y][dy]);
        suma(R[x][dx], C[dx]*toty);
      }

      if (k >= 2) {
        suma(R[x][1], (C[0] + C[1])*R[y][0]);
        totx = C[0];
        toty = 0;
        for (int d = 2; d <= mig; ++d) {
          suma(totx, C[d-1]);
          suma(toty, R[y][d-2]);
          suma(R[x][d], C[d]*toty);
          suma(R[x][d], R[y][d-1]*totx);
          suma(R[x][d], C[d]*R[y][d-1]);
        }
      }
    }
}


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

  cin >> n >> k;
  if (k == 0) {
    cout << 1 << endl;
    return 0;
  }

  mig = k/2;
  G = VVI(n + 1);
  for (int r = 0; r < n - 1; ++r) {
    int x, y;
    cin >> x >> y;
    G[x].push_back(y);
    G[y].push_back(x);
  }

  R = VVL(n + 1, VL(k + 1, 0));
  dfs(1, 0);

  ll res = 0;
  for (int d = 0; d <= k; ++d) suma(res, R[1][d]);
  cout << res << endl;
}
