#include<bits/stdc++.h>
using namespace std;
int n, k, tot, u, v, x = 1, y, len, ans, h[200010], dep[200010], f[200010], maxd[200010], lend[200010];
struct Edge{
int u;
int v;
int w;
int ne;
}a[200010];
void add(int u, int v, int w){
a[++tot].u = u;
a[tot].v = v;
a[tot].w = w;
a[tot].ne = h[u];
h[u] = tot;
}
void dfs(int x, int fa){
if(len < dep[x]){
len = dep[x];
y = u;
}
for(int i = h[x]; i >= 1; i = a[i].ne){
int v = a[i].v;
if(fa != v){
dep[v] = dep[x] + 1;
f[v] = x;
dfs(v, x);
}
}
}
void dfs2(int x, int fa){
maxd[x] = dep[x];
for(int i = h[x]; i; i = a[i].ne){
int v = a[i].v;
if(fa != v){
dep[v] = dep[x] + 1;
f[v] = x;
dfs2(v, x);
maxd[x] = max(maxd[x], maxd[v]);
}
}
}
bool cmp(int a, int b){
return a > b;
}
int main(){
scanf("%d%d", &n, &k);
for(int i = 1; i < n; i++){
scanf("%d%d", &u, &v);
add(u, v, 1);
add(v, u, 1);
}
dfs(x, -1);
memset(f, 0, sizeof(f));
memset(dep, 0, sizeof(dep));
len = 0;
dfs(y, -1);
int pos = y;
for(int i = 1; i <= (dep[y] + 1) / 2; i++, pos = f[pos]);
memset(f, 0, sizeof(f));
memset(dep, 0, sizeof(dep));
x = 1;
y = len = 0;
dfs2(pos, -1);
for(int i = 1; i <= n; i++){
lend[i] = maxd[i] - dep[i];
}
sort(lend + 1, lend + n + 1, cmp);
for(int i = k + 1; i <= n; i++){
ans = max(ans, lend[i] + 1);
}
printf("%d", ans);
return 0;
}