#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e5+10;
struct node{
int v,next;
}e[N<<1];
int n,s,tot,ans,head[N];
int f[N],a[N];
void add(int x,int y){
e[++tot].v=y;
e[tot].next=head[x];
head[x]=tot;
}
void dfs(int u,int fa,int num){
int cnt=0;
for(int i=head[u];i;i=e[i].next) if(e[i].v!=fa) dfs(e[i].v,u,num);
for(int i=head[u];i;i=e[i].next) if(e[i].v!=fa) a[++cnt]=f[e[i].v]+1;
sort(a+1,a+cnt+1);
while (cnt&&a[cnt]+a[cnt-1]>num) cnt--,ans++;
f[u]=a[cnt];
}
inline bool check(int x){
ans=0;
dfs(1,0,x);
return ans<=s;
}
int main(){
scanf("%d%d",&n,&s);
for(int i=1,x,y;i<n;i++) scanf("%d%d",&x,&y),add(x,y),add(y,x);
int l=1,r=n;
while(l<r){
int mid=l+r>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
printf("%d\n",l);
return 0;
}