#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define mem(x, y) memset(& x, y, sizeof(x))
#define all(x) begin(x), end(x)
#define SZ(x) (int)(x).size()
using namespace std;

const int n0=5003,mod=998244353;
struct mint {
	unsigned int x;
	mint(int _x=0) {
		x=_x;
	}
	void operator += (const mint a) {
		x+=a.x;
		if(x>=mod) x-=mod;
	}
	void operator -= (const mint a) {
		x+=mod;
		x-=a.x;
		if(x>=mod) x-=mod;
	}
	void operator *= (const mint a) {
		x=(ll)x*a.x%mod;
	}
	mint operator + (const mint a) {
		mint res=*this;
		res+=a;
		return res;
	}
	mint operator - (const mint a) {
		mint res=*this;
		res-=a;
		return res;
	}
	mint operator * (const mint a) {
		mint res=*this;
		res*=a;
		return res;
	}
};
int n,k;
int f(int x) {
	return k-x-2;
}
vector<int> g[n0];
mint dp[n0][n0],acc[n0][n0],pref[n0],suf[n0];
void dfs(int v,int p) {
	int ch=0;
	dp[v][0]=1;
	for(int to:g[v]) {
		if(to==p) continue;
		dfs(to,v);
		acc[to][0]=dp[to][0];
		for(int i=1; i<=k; i++)
			acc[to][i]=acc[to][i-1]+dp[to][i];
		dp[v][0]*=acc[to][k];
		ch++;
	}
	if(ch==0) return;
	for(int mx=0; mx<k; mx++) {
		mint res=0;
		int need=min(f(mx),mx);
		suf[SZ(g[v])]=1;
		for(int it=SZ(g[v])-1; it>=0; it--) {
			suf[it]=suf[it+1];
			int to=g[v][it];
			if(to==p) continue;
			mint cur=acc[to][k];
			if(need>=0) cur+=acc[to][need];
			suf[it]*=cur;
		}
		if(mx==need) {
			mint bad=1;
			for(int to:g[v]) {
				if(to==p) continue;
				if(mx-1>=0) bad*=acc[to][k]+acc[to][mx-1];
				else bad*=acc[to][k];
			}
			dp[v][mx+1]+=suf[0]-bad;
		}	else {
			for(int it=0; it<SZ(g[v]); it++) {
				pref[it]=(it?pref[it-1]:1);
				int to=g[v][it];
				if(to==p) continue;
				
				mint others=suf[it+1]*pref[it];
				res+=dp[to][mx]*others;
				if(need>=0) pref[it]*=acc[to][k]+acc[to][need];
				else pref[it]*=acc[to][k];
			}
			dp[v][mx+1]+=res;
		}
	}
}

int main() {
	ios_base::sync_with_stdio(0), cin.tie(0);
	cin >> n >> k;
	for(int i=1; i<n; i++) {
		int x,y;cin >> x >> y;g[x].pb(y),g[y].pb(x);
	}
	dfs(1,1);
	mint ans=0;
	for(int i=0; i<=k; i++) ans+=dp[1][i];
	cout << ans.x;
}
