#include <bits/stdc++.h>
using namespace std;
const int ling=100010;
int ecnt,box[ling],shu;
int deep[ling],mdeep[ling],fa[ling];
int bashu[ling];
struct kevin{
int v,next;
}tree[2*ling];
void edu(int v,int u){
tree[++ecnt].v=v;
tree[ecnt].next=box[u];
box[u]=ecnt;
}
void dfs(int u,int f){
if(shu==2){
mdeep[u]=deep[u];
}
for(int i=box[u]; i; i=tree[i].next){
int s=tree[i].v;
if(s!=f){
if(shu==1){
fa[s]=u;
}
deep[s]=deep[u]+1;
dfs(s,u);
if(shu==2){
mdeep[u]=max(mdeep[u],mdeep[s]);
}
}
}
}
void ql(){
memset(deep,0,sizeof(deep));
}
bool cmp(int a,int b){
return a>b;
}
int main(){
int n,k,u,v;
scanf("%d%d",&n,&k);
for(int i=1; i<=n-1; i++){
scanf("%d%d",&u,&v);
edu(u,v); edu(v,u);
}
dfs(1,0);
int ans=1;
for(int i=2; i<=n; i++){
if(deep[ans]<deep[i]){
ans=i;
}
}
ql();
shu++; //致敬郭沛骅
dfs(ans,0);
int zj=0; ans=1;
for(int i=1; i<=n; i++){
if(deep[ans]<deep[i]){
ans=i;
zj=deep[ans];
}
}
int peihua=ans;
for(int i=1; i<=(deep[ans]+1)/2; i++){
peihua=deep[peihua];
}
ql();
shu++;
dfs(peihua,0);
for(int i=1; i<=n; i++){
bashu[i]=mdeep[i]-deep[i];
}
sort(bashu+1,bashu+1+n,cmp);
int num=1;
for(int i=k+1; i<=n; i++){
num=max(num,bashu[i]+1);
}
printf("%d\n",num);
return 0;
}