#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#pragma GCC optimize("O3")
const ll N=405;
vector<ll>g[N];
ll tin[N],tout[N],ti;
ll n,k,m;
ll dep[N],par[N];
void dfs(ll u,ll p){
tin[u]=++ti;
par[u]=p;
for(ll v:g[u]){
if(v!=p){
dep[v]=dep[u]+1;
dfs(v,u);
}
}
tout[u]=++ti;
}
ll vs[N];
array<ll,2>rn[N];
const ll K=22;
ll f[(1<<K)];
ll er[K][N];
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);
}
if(k>=20){
cout<<"DA";return 0;
}
dfs(1,0);
fill(vs,vs+N,1);
vector<array<ll,2>>leaf;
for(int i=1;i<=n;++i){
if(dep[i]!=k)continue;
leaf.push_back({tin[i],i});
ll cur=i;
while(cur){
vs[cur]=0;
cur=par[cur];
}
}
m=leaf.size();
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};
}
for(int i=0;i<K;++i){
fill(er[i],er[i]+N,-1);
}
vector<array<ll,3>>lk;
for(int i=2;i<=n;++i){
if(vs[i])continue;
lk.push_back({rn[i][0],rn[i][1],i});
er[dep[i]-1][rn[i][0]]=max(
er[dep[i]-1][rn[i][0]],rn[i][1]);
}
for(ll msk=0;msk<(1<<k);++msk){
for(int i=0;i<k;++i){
if(msk&(1<<i))continue;
f[msk|(1<<i)]=max(f[msk|(1<<i)],
er[i][f[msk]+1]);
}
}
ll ans=1e9;
for(ll msk=0;msk<(1<<k);++msk){
if(f[msk]!=m)continue;
ans=min(ans,(ll)__builtin_popcountll(msk));
}
cout<<(ans<=k?"DA":"NE");
}