#include <bits/stdc++.h>
using namespace std;
const long long MAX = 2e6 + 9;
const long long INF = 1e12;
multiset<int> st;
multiset<int>::iterator it_1, it_2;
vector<int> vec[MAX];
int N, K, X, Y, res, hei[MAX], arr[MAX];
void dfs(int node, int par) {
  arr[node] = -1;
  if (vec[node].size() == 1 and vec[node][0] == par) {
    arr[node] = hei[node];
    return;
  }
  for (auto A : vec[node]) {
    if (A == par) continue;
    hei[A] = hei[node] + 1;
    dfs(A, node);
  }
  st.clear();
  for (auto A : vec[node]) {
    if (A == par) continue;
    if (arr[A] != -1) st.insert(arr[A]);
  }
  while (st.size() > 1) {
    it_1 = st.end();
    it_1--;
    it_2 = st.begin();
    if (*it_1 - hei[node] + *it_2 - hei[node] > K)
      st.erase(it_1), res++;
    else
      st.erase(it_2);
  }
  if (!(st.empty())) arr[node] = *st.begin();
  return;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin >> N >> K;
  for (int A = 1; A < N; A++) {
    cin >> X >> Y;
    vec[X].push_back(Y);
    vec[Y].push_back(X);
  }
  for (int A = 1; A <= N; A++) {
    if (A == N or vec[A].size() > 1) {
      dfs(A, 0);
      return cout << res + st.size(), 0;
    }
  }
  return 0;
}
