#include <bits/stdc++.h>
using namespace std;
template <typename T>
void out(T x) {
  cout << x << endl;
  exit(0);
}
using ll = long long;
const int maxn = 1e6 + 5;
int n, k;
vector<int> g[maxn];
multiset<int> ms[maxn];
void dfs(int at, int d = 0, int p = -1) {
  if ((int)g[at].size() == 1) {
    ms[at].insert(d);
    return;
  }
  int big = -1;
  for (int to : g[at]) {
    if (to == p) continue;
    dfs(to, d + 1, at);
    if (big == -1 || ms[big].size() < ms[to].size()) {
      big = to;
    }
  }
  swap(ms[at], ms[big]);
  for (int to : g[at]) {
    if (to == p) continue;
    if (to == big) continue;
    for (int it : ms[to]) {
      int dd = k + 2 * d - it;
      auto iter = ms[at].upper_bound(dd);
      if (iter == ms[at].begin()) {
        ms[at].insert(it);
      } else {
        --iter;
        int tmp = *iter;
        ms[at].erase(iter);
        ms[at].insert(max(tmp, it));
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    --u;
    --v;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  int rt = 0;
  while (rt < n && (int)g[rt].size() == 1) rt++;
  assert(rt < n);
  dfs(rt);
  out(ms[rt].size());
  return 0;
}
