#include <bits/stdc++.h>
using namespace std;
vector<int> p[1000010];
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return x * f;
}
inline void write(int x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
struct node {
  int x, y, next;
} a[2000010];
int len, last[1000010];
inline void ins(int x, int y) {
  len++;
  a[len].x = x;
  a[len].y = y;
  a[len].next = last[x];
  last[x] = len;
}
int m, f[1000010], g[1000010];
inline void dfs(int x, int fa) {
  for (int k = last[x]; k; k = a[k].next) {
    int y = a[k].y;
    if (y == fa) continue;
    dfs(y, x);
    p[x].push_back(g[y] + 1);
    f[x] += f[y];
  }
  sort(p[x].begin(), p[x].end());
  bool bk = false;
  for (int i = p[x].size() - 1; i >= 1; i--) {
    if (p[x][i] + p[x][i - 1] > m)
      f[x]++;
    else {
      g[x] = p[x][i], bk = true;
      break;
    }
  }
  if (bk == false && p[x].size()) g[x] = p[x][0];
}
bool v[1000010];
int main() {
  memset(v, false, sizeof(v));
  int n = read(), rt = -1;
  m = read();
  for (int i = 1; i < n; i++) {
    int x = read(), y = read();
    ins(x, y), ins(y, x);
    if (v[x] == true && rt == -1) rt = x;
    if (v[y] == true && rt == -1) rt = y;
    v[x] = v[y] = true;
  }
  memset(g, 0, sizeof(g));
  dfs(rt, 0);
  printf("%d\n", f[rt] + 1);
  return 0;
}
