#include <bits/stdc++.h>
int cnt = 0, ans = 0, n, k;
std::queue<int> tmp;
std::vector<int> vec[1000005];
int h[1000005], to[2000005], ver[2000005];
int dep[1000005], du[1000005];
inline int read() {
  register int x = 0, f = 1;
  register char s = getchar();
  while (s > '9' || s < '0') {
    if (s == '-') f = -1;
    s = getchar();
  }
  while (s >= '0' && s <= '9') {
    x = x * 10 + s - '0';
    s = getchar();
  }
  return x * f;
}
inline void add(int x, int y) {
  ++du[x];
  to[++cnt] = y;
  ver[cnt] = h[x];
  h[x] = cnt;
}
inline void add_d(int x, int y) {
  add(x, y);
  add(y, x);
}
inline int max(const int &x, const int &y) { return x > y ? x : y; }
inline int min(const int &x, const int &y) { return x < y ? x : y; }
inline int dfs(int x, int fa) {
  if (du[x] == 1) return du[x];
  int res = 0;
  for (register int i = h[x], y, t; i; i = ver[i]) {
    if ((y = to[i]) == fa) continue;
    t = dfs(y, x);
    if (t + res > k) {
      ++ans;
      res = min(res, t);
    } else if (res < t)
      res = t;
  }
  return res ? res + 1 : 0;
}
int main() {
  n = read();
  k = read();
  for (register int i = 1; i < n; ++i) add_d(read(), read());
  int rt = 1;
  for (register int i = 2; i <= n; ++i)
    if (du[i] > 1) {
      rt = i;
      break;
    }
  dep[rt] = 1;
  int x = dfs(rt, -1);
  printf("%d\n", ans + (x > 0));
  return 0;
}
