#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 50;
inline int gi() {
  char ch = getchar();
  int q = 0, x = 0;
  while (ch < '0' || ch > '9') q = (ch == '-' ? 1 : q), ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return q ? (-x) : x;
}
int n, k, ans, d[N], f[N], head[N], nn[N * 2][2], cnt;
void dfs(int x, int fa) {
  int num = 0;
  for (int i = head[x], y; i; i = nn[i][0])
    if ((y = nn[i][1]) != fa) {
      ++num, dfs(y, x);
      if (num == 1)
        f[x] = f[y] + 1;
      else {
        if (f[x] + f[y] + 1 <= k)
          f[x] = max(f[x], f[y] + 1), --ans;
        else
          f[x] = min(f[x], f[y] + 1);
      }
    }
  return;
}
int main() {
  cin >> n >> k;
  int u, v;
  for (int i = 1; i < n; ++i)
    u = gi(), v = gi(),
    (nn[++cnt][1] = v, nn[cnt][0] = head[u], head[u] = cnt, ++d[v]),
    (nn[++cnt][1] = u, nn[cnt][0] = head[v], head[v] = cnt, ++d[u]);
  for (int i = 1; i <= n; ++i)
    if (d[i] == 1) ++ans;
  if (n == 2) return puts("1"), 0;
  for (int i = 1; i <= n; ++i)
    if (d[i] != 1) {
      dfs(i, 0), cout << ans;
      break;
    }
  return 0;
}
