#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> edge[100001];
ll center;
ll n,dsize;
ll dl[100001];
ll d1=1,d2=1,d1n,d2n,mfn;
ll fl[100001];
ll bl[100001];
ll bir[100001];
struct ptinfo{
ll num;
ll p;
ll sum;
};
void lfd(){
queue<ptinfo>pt;
pt.push({1,1,1});
while(!pt.empty()){
ptinfo head=pt.front();
if(head.sum>d1n){
d1n=head.sum;
d1=head.num;
}
for(auto i:edge[head.num]){
if(i==head.p)continue;
pt.push({i,head.num,head.sum+1});
}
pt.pop();
}
dl[1]=d1;
pt.push({d1,d1,1});
while(!pt.empty()){
ptinfo head=pt.front();
if(head.sum>d2n){
d2n=head.sum;
d2=head.num;
dl[head.sum]=head.num;
dsize=max(dsize,head.sum);
}
for(auto i:edge[head.num]){
if(i==head.p)continue;
pt.push({i,head.num,head.sum+1});
}
pt.pop();
}
center=dl[dsize/2+(dsize%2)];
return;
}
void dfs(ll num,ll p){
bl[num]=fl[num];
for(auto i:edge[num]){
if(i==p)continue;
fl[i]=fl[num]+1;
dfs(i,num);
bl[num]=max(bl[num],bl[i]);
}
}
int main(){
ll k;
cin>>n>>k;
for(ll i=1;i<=n-1;i++){
ll u,v;
cin>>u>>v;
edge[u].push_back(v);
edge[v].push_back(u);
}
lfd();
dfs(center,center);
for(ll i=1;i<=n;i++)bir[i]=bl[i]-fl[i];
sort(bir+1,bir+1+n);
cout<<bir[n-k]+1;
}