#include <bits/stdc++.h>
using namespace std;
int n, k, a[1000010], in[1000010], ans = 0;
int ne = 0, h[1000010];
struct edge {
  int to, x;
} e[1000010 << 1];
inline void ins(int s, int t) {
  e[++ne].to = t;
  e[ne].x = h[s];
  h[s] = ne;
}
int dfs(int u, int fa) {
  if (1 == in[u]) return 1;
  vector<int> V;
  int i, v, t;
  for (i = h[u]; i; i = e[i].x) {
    v = e[i].to;
    if (v != fa) {
      t = dfs(v, u);
      if (t) V.push_back(t);
    }
  }
  if (V.empty()) return 0;
  sort(V.begin(), V.end());
  for (i = V.size() - 1; i; --i) {
    if (V[i] + V[i - 1] <= k) break;
    ++ans;
  }
  return V[i] + 1;
}
int main() {
  int a, b;
  scanf("%d%d", &n, &k);
  for (int i = 1; i < n; ++i) {
    scanf("%d%d", &a, &b);
    ins(a, b);
    ins(b, a);
    ++in[a];
    ++in[b];
  }
  for (int i = 1; i <= n; ++i)
    if (in[i] > 1) {
      dfs(i, 0);
      break;
    }
  printf("%d", ans + 1);
  return 0;
}
