#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
const long double eps = 1e-7;
const int inf = 1000000010;
const long long INF = 10000000000000010LL;
const int mod = 1000000007;
const int MAXN = 1000010, LOG = 20;
int n, m, k, u, v, x, y, t, a, b, ans = 1, root, lst;
int h[MAXN];
vector<int> G[MAXN];
set<pair<int, int> > st[MAXN];
void dfs(int node, int p) {
  h[node] = h[p] + 1;
  if (G[node].size() == 1) {
    st[node].insert({h[node], node});
    return;
  }
  for (int i : G[node])
    if (i != p) {
      dfs(i, node);
      if (st[node].size() < st[i].size()) st[node].swap(st[i]);
    }
  for (int i : G[node])
    if (i != p) {
      while (!st[node].empty() && !st[i].empty()) {
        int u = (*st[node].begin()).second, v = (*st[i].begin()).second;
        if (h[u] + h[v] - 2 * h[node] <= k) {
          if (h[u] < h[v])
            st[node].erase(st[node].begin());
          else
            st[i].erase(st[i].begin());
        } else
          break;
      }
      while (!st[i].empty()) {
        st[node].insert(*st[i].begin());
        st[i].erase(st[i].begin());
      }
    }
}
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++) {
    cin >> u >> v;
    G[u].push_back(v);
    G[v].push_back(u);
  }
  while (G[root].size() <= 1) root++;
  dfs(root, root);
  cout << st[root].size() << '\n';
  return 0;
}
