#include <bits/stdc++.h>
using namespace std;
int pwr(int base, int p) {
  int ans = 1;
  while (p) {
    if (p & 1) ans = ((ans % 1000000007) * (base % 1000000007)) % 1000000007;
    base = ((base % 1000000007) * (base % 1000000007)) % 1000000007;
    p /= 2;
  }
  return ans;
}
int gcd(int a, int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
int powr(int base, int p) {
  int ans = 1;
  while (p) {
    if (p & 1) ans = (ans * base);
    base = (base * base);
    p /= 2;
  }
  return ans;
}
int dx[] = {1, -1, 0, 0, 1, 1, -1, -1};
int dy[] = {0, 0, 1, -1, 1, -1, 1, -1};
set<int> g[100005];
int f[100005];
int main() {
  int n, k;
  scanf("%d", &n);
  scanf("%d", &k);
  for (int i = (0); i < (n - 1); ++i) {
    int x, y;
    scanf("%d", &x);
    scanf("%d", &y);
    g[x].insert(y);
    g[y].insert(x);
  }
  set<int>::iterator it;
  set<int> s;
  for (int i = (0); i < (n); ++i) {
    if (g[i + 1].size() == 1) s.insert(i + 1);
  }
  while (n > 1) {
    set<int> s1;
    for (it = s.begin(); it != s.end(); it++) {
      int tp = *it;
      int u = *(g[tp].begin());
      s1.insert(u);
      g[u].erase(tp);
      f[u]++;
      n--;
    }
    for (it = s1.begin(); it != s1.end(); it++) {
      if (f[*it] < 3) {
        cout << "No";
        return 0;
      }
      f[*it] = 0;
    }
    k--;
    s = s1;
  }
  if (k == 0)
    cout << "Yes";
  else
    cout << "No";
}
