#include <bits/stdc++.h>
using namespace std;
long long add(long long a, long long b) {
  a += b;
  if (a >= 998244353) return a - 998244353;
  return a;
}
long long mul(long long a, long long b) {
  a *= b;
  if (a >= 998244353) return a % 998244353;
  return a;
}
long long power(long long x, long long y) {
  if (y == 0) return 1;
  long long foo = power(x, y / 2);
  foo = mul(foo, foo);
  if (y & 1) return mul(x, foo);
  return foo;
}
int n, k;
int root;
int ans = 0;
int h[1234567];
int mx[1234567];
vector<int> g[1234567];
void dfs(int u, int p, int len) {
  h[u] = len;
  for (int v : g[u]) {
    if (v == p) continue;
    dfs(v, u, len + 1);
  }
}
void dfs(int u, int p) {
  if (((int)(g[u].size())) == 1) {
    mx[u] = h[u];
    return;
  }
  vector<pair<int, int> > x;
  for (int v : g[u]) {
    if (v == p) continue;
    dfs(v, u);
    x.push_back({mx[v] - h[u], v});
  }
  sort(x.begin(), x.end());
  int i = 1;
  for (; i < ((int)(x.size())); i++) {
    if (x[i].first + x[i - 1].first <= k)
      continue;
    else
      break;
  }
  ans += (((int)(x.size())) - i);
  mx[u] = mx[x[i - 1].second];
  if (u == root) ans++;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  for (int i = 1; i < n; i++) {
    int u, v;
    cin >> u >> v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  vector<int> leaf;
  for (int i = 1; i <= n; i++) {
    if (((int)(g[i].size())) == 1)
      leaf.push_back(i);
    else
      root = i;
  }
  dfs(root, 0, 0);
  dfs(root, 0);
  cout << ans << '\n';
  return 0;
}
