#include <bits/stdc++.h>
using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
const long long maxn = 3e5 + 1000;
const long long mod = 1e9 + 7;
const long double PI = 4 * atan((long double)1);
long long pw(long long a, long long b, long long md = mod) {
  long long res = 1;
  while (b) {
    if (b & 1) {
      res = (a * res) % mod;
    }
    a = (a * a) % mod;
    b >>= 1;
  }
  return (res);
}
int f[maxn];
bool mark[maxn];
set<int> adj[maxn], q, qq;
int n, k;
int main() {
  cin >> n >> k;
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    adj[v].insert(u);
    adj[u].insert(v);
  }
  for (int i = 1; i <= n; i++) {
    if (adj[i].size() == 1) {
      q.insert(i);
    }
  }
  while (n > 1) {
    for (int v : q) {
      int u = *adj[v].begin();
      qq.insert(u);
      adj[v].erase(u);
      adj[u].erase(v);
      f[u]++;
      n--;
    }
    for (int v : qq) {
      if (f[v] < 3) {
        cout << "NO";
        return (0);
        ;
      }
      f[v] = -1e9;
    }
    swap(q, qq);
    qq.clear();
    k--;
  }
  cout << ((k == 0 && n == 1) ? "Yes" : "No");
  return (0);
}
