#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const ll N=801;
vector<ll>g[N];
ll tin[N],tout[N],ti,nd;
ll n,k,m;
ll dep[N],mx[N];
void dfs(ll u,ll p){
tin[u]=++ti;
mx[u]=dep[u];
for(ll v:g[u]){
if(v!=p){
dep[v]=dep[u]+1;
dfs(v,u);
mx[u]=max(mx[u],mx[v]);
}
}
tout[u]=++ti;
}
ll vs[N];
void mark(ll u,ll p){
vs[u]=1;
for(ll v:g[u]){
if(v!=p)mark(v,u);
}
}
array<ll,2>rn[N];
vector<ll>d[N];
const ll K=20;
ll f[(1<<K)];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>k;
for(int i=1,u,v;i<n;++i){
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1,0);
for(ll v:g[1]){
if(mx[v]<=k)mark(v,1);
}
/*nd=n;
for(int i=2;i<=n;++i){
if(g[i].size()==1&&dep[i]<=K){
g[i].push_back(++nd);
g[nd].push_back(i);
}
}
n=nd;*/
ti=0;
dep[1]=-1;
dfs(1,0);
vector<array<ll,2>>leaf;
for(int i=2;i<=n;++i){
if(vs[i])continue;
if(g[i].size()==1){
//cout<<i<<endl;
leaf.push_back({tin[i],i});
}
}
m=leaf.size();
//cout<<"ALFA"<<endl;
sort(leaf.begin(),leaf.end());
for(int i=1;i<=n;++i){
if(vs[i])continue;
ll j1=lower_bound(leaf.begin(),leaf.end(),array<ll,2>({tin[i],-1}))-leaf.begin();
ll j2=lower_bound(leaf.begin(),leaf.end(),array<ll,2>({tout[i],-1}))-leaf.begin()-1;
++j1,++j2;
rn[i]={j1,j2};
}
//cout<<"BETA"<<endl;
ll mxD=0;
for(int i=1;i<=n;++i){
if(vs[i])continue;
mxD=max(mxD,dep[i]);
}
ll U=min(K,mxD+1);
vector<array<ll,3>>lk;
for(int i=1;i<=n;++i){
if(vs[i])continue;
lk.push_back({rn[i][0],rn[i][1],i});
}
//cout<<m<<endl;
//cout<<"GAMA"<<endl;
sort(lk.begin(),lk.end());
for(auto[l,r,u]:lk){
if(vs[u])continue;
ll d=dep[u];
if(d>=U||d<0)continue;
for(ll msk=0;msk<(1<<U);++msk){
if(msk&(1<<d))continue;
if(f[msk]!=l-1)continue;
f[msk|(1<<d)]=max(f[msk|(1<<d)],r);
}
}
//cout<<"TETA"<<endl;
ll ans=1e9;
for(ll msk=0;msk<(1<<U);++msk){
if(f[msk]!=m)continue;
ans=min(ans,(ll)__builtin_popcountll(msk));
}
cout<<(ans<=k?"DA":"NE");
}