#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n,k,cnt,root;
struct edge
{
int to,nxt;
}e[maxn<<1];
int head[maxn],deep[maxn],mxdep[maxn],ans[maxn],f[maxn],numson[maxn];
struct node
{
int deep,id;
bool operator < (const node &p) const
{
return this->deep<p.deep;
}
}tmp[maxn];
void add (int u,int v)
{
cnt++;
e[cnt].to=v;
e[cnt].nxt=head[u];
numson[u]++;
head[u]=cnt;
}
void dfs (int x,int fa)
{
f[x]=fa;
mxdep[x]=deep[x]=deep[fa]+1;
for (int i=head[x];i;i=e[i].nxt) {
int son=e[i].to;
if (son==fa) continue;
dfs(son,x);
mxdep[x]=max(mxdep[x],mxdep[son]);
}
}
void dfs2 (int x,int fa)
{
mxdep[x]=deep[x]=deep[fa]+1;
for (int i=head[x];i;i=e[i].nxt) {
int son=e[i].to;
if (son==fa) continue;
dfs2(son,x);
mxdep[x]=max(mxdep[x],mxdep[son]);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin>>n>>k;
for (int i=1;i<n;i++) {
int u,v;
cin>>u>>v;
add(u,v); add(v,u);
}
for (int i=1;i<=n;i++)
if (numson[i]>1) {
root=i;
dfs(i,0);
break;
}
int mx1=0,mx2=0;
for (int i=head[root];i;i=e[i].nxt) {
if (mx1<=mxdep[e[i].to]) {
mx2=mx1;
mx1=mxdep[e[i].to];
}
else if (mx2==0) mx2=mxdep[e[i].to];
}
for (int i=1;i<=n;i++) {
tmp[i].deep=deep[i];
tmp[i].id=i;
}
sort(tmp+1,tmp+1+n);
int length=mx1+mx2-1;
root=tmp[n].id;
for (int kk=1;kk<=length/2;kk++)
root=f[root];
memset(deep,0,sizeof(deep));
dfs2(root,0);
for (int i=1;i<=n;i++)
ans[i]=mxdep[i]-deep[i];
sort(ans+1,ans+1+n);
cout<<ans[n-k]+1;
return 0;
}