#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000005;
int N, K, dep[maxn];
multiset<int> second[maxn];
vector<int> g[maxn];
void solve(int u, int p) {
  if (g[u].size() == 1) second[u].insert(dep[u]);
  for (int v : g[u]) {
    if (v == p) continue;
    dep[v] = dep[u] + 1;
    solve(v, u);
    if (second[u].size() < second[v].size()) swap(second[u], second[v]);
    for (int ck : second[v]) {
      auto it = second[u].upper_bound(K + 2 * dep[u] - ck);
      if (it != second[u].begin()) {
        int t = *(--it);
        second[u].erase(second[u].find(t));
        second[u].insert(max(t, ck));
      } else
        second[u].insert(ck);
    }
  }
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> N >> K;
  for (int i = 1; i < N; i++) {
    int a, b;
    cin >> a >> b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  if (N <= 2) {
    cout << 1 << endl;
    return 0;
  }
  int rt = -1;
  for (int i = 1; i <= N; i++)
    if (g[i].size() > 1) rt = i;
  solve(rt, -1);
  cout << second[rt].size() << '\n';
}
