#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+5;
int n,k,zj,num;
int dep[N],maxdep[N],ans[N],f[N];
int e[2*N],ne[2*N],h[2*N],idx;
bool cmp(int x,int y){
return x>y;
}
void add(int x,int y){
e[idx]=x,ne[idx]=h[y],h[y]=idx++;
}
void dfs1(int u,int v){
if(dep[u]>zj){
zj=dep[u];
num=u;
}
for(int i=h[u];i!=-1;i=ne[i]){
int k=e[i];
if(k==v)continue;
dep[k]=dep[u]+1;
dfs1(k,u);
}
}
void dfs2(int u,int v){
if(dep[u]>zj){
zj=dep[u];
num=u;
}
for(int i=h[u];i!=-1;i=ne[i]){
int k=e[i];
if(k==v)continue;
f[k]=u;
dfs2(k,u);
}
}
void dfs_k(int u,int v){
maxdep[u]=dep[u];
for(int i=e[u];i!=-1;i=ne[i]){
int k=e[i];
if(k==v)continue;
dep[k]=dep[u]+1;
dfs_k(k,u);
maxdep[u]=max(maxdep[u],maxdep[k]);
}
}
int main(){
memset(h,-1,sizeof h);
cin>>n>>k;
for(int i=1;i<n;++i){
int x,y;
cin>>x>>y;
add(x,y);
add(y,x);
}
dfs1(1,0);
memset(dep,0,sizeof dep);
zj=0;
dfs2(num,0);
int kkk=num;
for(int i=1;i<=(dep[num]+1)/2;i++){
kkk=f[kkk];
}
memset(dep,0,sizeof dep);
dfs_k(kkk,0);
for(int i=1;i<=n;++i){
ans[i]=maxdep[i]-dep[i];
}
sort(ans+1,ans+1+n,cmp);
cout<<ans[k+1]+1<<endl;
return 0;
}