#include <bits/stdc++.h>
using namespace std;
int n, k;
const int maxn = 1e6 + 9;
int head[maxn], nex[maxn << 1], to[maxn << 1], now;
void add(int a, int b) {
  nex[++now] = head[a];
  head[a] = now;
  to[now] = b;
}
int deg[maxn];
int dep[maxn];
priority_queue<pair<int, int> > Q;
void dfs(int p, int fa, int d) {
  dep[p] = d;
  int son = 0;
  for (int i = head[p]; i; i = nex[i]) {
    int u = to[i];
    if (u == fa) continue;
    dfs(u, p, d + 1);
    son++;
  }
  if (son == 0) Q.push({d, p});
}
bool vis[maxn];
void dfs2(int p, int fa, int len) {
  vis[p] = 1;
  if (len == k) return;
  for (int i = head[p]; i; i = nex[i]) {
    int u = to[i];
    if (u == fa) continue;
    dfs2(u, p, len + 1);
  }
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n - 1; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    add(a, b), add(b, a);
    deg[a]++;
    deg[b]++;
  }
  if (n == 2) {
    return 0 * printf("1\n");
  }
  int rt;
  for (int i = 1; i <= n; i++)
    if (deg[i] > 1) rt = i;
  dfs(rt, -1, 1);
  int ans = 0;
  while (!Q.empty()) {
    pair<int, int> P = Q.top();
    Q.pop();
    if (vis[P.second]) continue;
    ans++;
    dfs2(P.second, -1, 0);
  }
  printf("%d\n", ans);
}
