#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const int MX = 1e6 + 9;
int n, k, vis[MX], dis[MX], node, mx;
vector<int> v[MX];
vector<pair<int, int> > nodes;
void dfs(int x, int p, int d) {
  if (d >= mx) {
    mx = d;
    node = x;
  }
  for (auto pp : v[x]) {
    if (pp == p) continue;
    dfs(pp, x, d + 1);
  }
}
void pro(int x, int p, int d) {
  if (v[x].size() == 1) nodes.push_back({d, x});
  for (auto pp : v[x]) {
    if (pp == p) continue;
    pro(pp, x, d + 1);
  }
}
void pro1(int y) {
  queue<pair<int, int> > q;
  q.push({0, y});
  while (!q.empty()) {
    int x = q.front().second, c = q.front().first;
    q.pop();
    if (c == k) continue;
    for (auto pp : v[x]) {
      if (dis[pp] > c + 1) {
        dis[pp] = c + 1;
        q.push({c + 1, pp});
      }
    }
  }
}
int x, y;
int main() {
  cin >> n >> k;
  for (int i = 1; i <= n; i++) dis[i] = MX + MX;
  int ans = 0;
  for (int i = 0; i < n - 1; i++) {
    scanf("%d%d", &x, &y);
    v[x].push_back(y);
    v[y].push_back(x);
  }
  dfs(1, -1, 0);
  pro(node, -1, 0);
  sort(nodes.begin(), nodes.end());
  reverse(nodes.begin(), nodes.end());
  for (auto pp : nodes) {
    if (dis[pp.second] != 2 * MX) continue;
    ans++;
    pro1(pp.second);
  }
  cout << ans << endl;
}
