//论全局变量的杀伤力....QAQ
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#include<vector>
#define MAXN 100005
using namespace std;
int f[MAXN];
struct Tree
{
int to,next;
}c[MAXN<<2];
vector<int>son[MAXN];
int head[MAXN],t;
inline void add(int x,int y)
{
c[++t].to=y;
c[t].next=head[x];
head[x]=t;
c[++t].to=x;
c[t].next=head[y];
head[y]=t;
}
int n,s,mid;
int comp(const int x,const int y)
{
return f[x]>f[y];
}
void Dfs(int p,int fa)
{
for(int i=head[p];i;i=c[i].next)
if(c[i].to!=fa)
{
son[p].push_back(c[i].to);
Dfs(c[i].to,p);
}
son[p].push_back(0);
}
void dfs(int p,int &x,int fa)
{
for(int i=head[p];i;i=c[i].next)
if(c[i].to!=fa)
dfs(c[i].to,x,p);
sort(son[p].begin(),son[p].end(),comp);
int i=0;
for(;i<son[p].size()-1;i++)
if(f[son[p][i]]+f[son[p][i+1]]>mid)
x++;
else
break;
f[p]=f[son[p][i]]+1;
}
int main()
{
scanf("%d%d",&n,&s);
for(int i=1;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
}
Dfs(1,0);
int l=0,ans=n-1,r=n-1;
while(l<=r)
{
mid=(l+r)>>1;
int x=0;
dfs(1,x,0);
if(x<=s)
ans=mid,r=mid-1;
else
l=mid+1;
}
printf("%d",ans);
return 0;
}