#include <bits/stdc++.h>
using namespace std;
inline void File() {}
template <typename T>
inline void read(T &_) {
  _ = 0;
  T __ = getchar(), ___ = 1;
  while (!isdigit(__)) {
    if (__ == '-') ___ = -1;
    __ = getchar();
  }
  while (isdigit(__)) {
    _ = (_ << 1) + (_ << 3) + (__ ^ '0');
    __ = getchar();
  }
  _ *= ___;
}
template <typename T>
inline bool Chkmax(T &_, T __) {
  return _ < __ ? _ = __, 1 : 0;
}
template <typename T>
inline bool Chkmin(T &_, T __) {
  return _ > __ ? _ = __, 1 : 0;
}
const int N = 1e6 + 1e2;
int n, K, Ans;
int In[N];
vector<int> G[N];
inline int Dfs(int x, int fa) {
  if (In[x] == 1) return 1;
  vector<int> vec;
  for (int i = 0, Ed = G[x].size(); i < Ed; i++)
    if (G[x][i] != fa) vec.push_back(Dfs(G[x][i], x));
  sort(vec.begin(), vec.end());
  int pre = vec[0];
  for (int i = 1, Ed = vec.size(); i < Ed; i++, pre = vec[i - 1])
    if (pre + vec[i] > K) {
      Ans += (int)vec.size() - i;
      return pre + 1;
    }
  return vec[(int)vec.size() - 1] + 1;
}
int main() {
  File();
  read(n), read(K);
  for (int i = 1, u, v; i < n; i++)
    read(u), read(v), G[u].push_back(v), G[v].push_back(u), In[u]++, In[v]++;
  for (int i = 1; i <= n; i++)
    if (In[i] != 1) {
      Dfs(i, 0);
      break;
    }
  printf("%d\n", Ans + 1);
  return 0;
}
