#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int h[N],to[N],ne[N],tot,ans;
int n,k,pr[N],root,sy,d[N],s[N],dip,sum[N];
bool st[N];
vector<int> v;
void add(int x,int y){
to[++tot]=y;ne[tot]=h[x];h[x]=tot;
}
void bfs(){
queue<int> q;q.push(1);st[1]=true;
while(q.size()){
int u=q.front();q.pop();
root=u;
for(int i=h[u];i;i=ne[i]){
int y=to[i];
if(st[y])continue;st[y]=true;
q.push(y);
}
}
}
void bfs2(){
memset(st,false,sizeof st);
memset(pr,-1,sizeof pr);
queue<int> q;q.push(root);st[root]=true;
while(q.size()){
int u=q.front();q.pop();
sy=u;
for(int i=h[u];i;i=ne[i]){
int y=to[i];
if(st[y])continue;st[y]=true;
q.push(y);pr[y]=u;
}
}
int t=sy;v.push_back(sy);
while(pr[t]!=-1){
v.push_back(pr[t]);
t=pr[t];
}
}
void bfs3(){
memset(d,0x3f,sizeof d);
queue<int> q;q.push(root);d[root]=1;d[0]=0;dip=1;
s[1]=1;
while(q.size()){
int u=q.front();q.pop();
for(int i=h[u];i;i=ne[i]){
int y=to[i];
if(d[y]>d[u]+1){
d[y]=d[u]+1;
s[d[y]]++;
dip=max(dip,d[y]);
q.push(y);
}
}
}
}
int main(){
cin>>n>>k;
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
add(x,y);add(y,x);
}
bfs();
bfs2();
root=v[(v.size()-1)>>1];
bfs3();
for(int i=1;i<=dip;i++)sum[i]=sum[i-1]+s[i];
for(int i=1;i<=dip;i++){
if(sum[i]>k){
ans=dip-i+1;break;
}
}
cout<<ans;
}