#include <bits/stdc++.h>
using namespace std;
struct tree {
  vector<vector<int>> adj;
  tree(int n) : adj(n + 1) {}
  void add_edge(int u, int v) {
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
};
int dfs(int v, int p, tree &t, int k, vector<int> &len) {
  if (t.adj[v].size() == 1) return 0;
  vector<int> lst;
  int res = 0;
  for (int u : t.adj[v])
    if (p ^ u) {
      res += dfs(u, v, t, k, len);
      lst.push_back(len[u]);
    }
  sort(lst.begin(), lst.end(), greater<int>());
  int cur_mx = k + 1;
  for (int x : lst) {
    if (cur_mx + x + 2 <= k) continue;
    ++res;
    cur_mx = x;
  }
  len[v] = cur_mx + 1;
  return res - 1;
}
int32_t main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, k;
  cin >> n >> k;
  tree t(n);
  for (int i = 1; i < n; i++) {
    int u, v;
    cin >> u >> v;
    t.add_edge(u, v);
  }
  for (int i = 1; i <= n; i++)
    if (t.adj[i].size() > 1) {
      vector<int> len(n + 1, 0);
      cout << dfs(i, 0, t, k, len) + 1 << endl;
      return 0;
    }
}
