#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1e6+10;
int n,k,u,v,hea[N],to[N],net[N],cnt,dep[N],lduan,rduan,f[N],maxdep[N],ke[N],ans=1e9;
int read() {
int x=0;char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9')
x=(x<<3)+(x<<1)+(ch^48),
ch=getchar();
return x;
}
void add(int x,int y) {
to[++cnt]=y;
net[cnt]=hea[x];
hea[x]=cnt;
}
void dfs1(int x,int fa) {
dep[x]=dep[fa]+1;
for(int i=hea[x];i;i=net[i]) {
int y=to[i];
if(y==fa) continue;
dfs1(y,x);
}
}
void dfs2(int x,int fa) {
dep[x]=dep[fa]+1;
for(int i=hea[x];i;i=net[i]) {
int y=to[i];
if(y==fa) continue;
dfs2(y,x);
f[y]=x;
}
}
void dfs3(int x,int fa) {
maxdep[x]=dep[x]=dep[fa]+1;
for(int i=hea[x];i;i=net[i]) {
int y=to[i];
if(y==fa) continue;
dfs3(y,x);
maxdep[x]=max(maxdep[x],maxdep[y]);
}
}
bool cmp(int a,int b) {
return a>b;
}
void qiuzhij() {
dfs1(1,0);
lduan=1;
for(int i=2;i<=n;i++)
if(dep[i]>dep[lduan])
lduan=i;
memset(dep,0,sizeof(dep));
dfs2(lduan,0);
rduan=lduan;
for(int i=1;i<=n;i++)
if(dep[i]>dep[rduan])
rduan=i;
int mid=rduan;
for(int i=1;i<=(dep[rduan]+1)>>1;i++) mid=f[mid];
memset(dep,0,sizeof(dep));
dfs3(mid,0);
for(int i=1;i<=n;i++) ke[i]=maxdep[i]-dep[i];
sort(ke+1,ke+1+n,cmp);
printf("%d\n",ke[k+1]+1);
}
int main() {
n=read();k=read();
for(int i=1;i<n;i++) {
u=read();v=read();
add(u,v);
add(v,u);
}
qiuzhij();
return 0;
}