#include <bits/stdc++.h>
using namespace std;
const int mod = 998244353;
const int N = 1e6 + 5;
const int base = 350;
mt19937_64 mt(chrono::steady_clock::now().time_since_epoch().count());
int n, m, t, k, T, ans, tong, d[N], a[N], b[N], h[N], c[N];
vector<int> adj[N];
vector<int> kq;
int pw(int k, int n) {
  int total = 1;
  for (; n; n >>= 1) {
    if (n & 1) total = total * k % mod;
    k = k * k % mod;
  }
  return total;
}
void add(int& x, int y) {
  x += y;
  if (x < 0) x += mod;
  if (x >= mod) x -= mod;
}
int dfs(int u, int p) {
  vector<int> cur;
  for (int v : adj[u]) {
    if (v == p) continue;
    cur.push_back(dfs(v, u) + 1);
  }
  if (cur.empty()) return 0;
  int mx = -1, res = -1;
  for (int v : cur)
    if (v * 2 <= k && (mx == -1 || mx < v)) mx = v;
  if (mx == -1) {
    ans += cur.size() - 1;
    return *min_element(cur.begin(), cur.end());
  }
  for (int v : cur) {
    if (v > mx && v + mx <= k && (res == -1 || res > v)) res = v;
    if (v > mx) ++ans;
  }
  if (res != -1) {
    --ans;
    return res;
  }
  return mx;
}
void sol() {
  cin >> n >> k;
  for (int i = 1; i < n; i++) {
    int x, y;
    cin >> x >> y;
    adj[x].push_back(y);
    adj[y].push_back(x);
  }
  for (int i = 1; i <= n; i++) {
    if (adj[i].size() > 1) {
      dfs(i, -1);
      cout << ans + 1;
      return;
    }
  }
}
int main() {
  if (fopen("cowpatibility"
            ".in",
            "r")) {
    freopen(
        "cowpatibility"
        ".in",
        "r", stdin);
    freopen(
        "cowpatibility"
        ".out",
        "w", stdout);
  }
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int ntest = 1;
  while (ntest-- > 0) sol();
}
