#include<bits/stdc++.h>
using namespace std;
const int N= 1e6+10;
int n, k; using ll = long long ;
vector<int> p[N];int sel[N];
int dis[N];int far;
int fa[N];int flag[N];
void dfs(int u, int f){
fa[u] = f;
if(dis[u]> dis[far]) far = u;
for(int i = 0; i<p[u].size();++i)
{
int v = p[u][i];
if(v == f || flag[v]) continue;
dis[v]= dis[u]+ 1;
dfs(v, u);
}
}
bool cmp(int a, int b){
return a > b;}
int max_deep[N];
void dfs2(int u , int f){
max_deep[u] = dis[u];
for(int i = 0; i < p[u].size();++i)
{
int v = p[u][i];
if(v== f)continue;
dis[v] = dis[u]+1;
dfs2(v, u);
max_deep[u] = max(max_deep[u], max_deep[v]);
}
}
int ans;
int main(){
cin >> n >> k;
for(int i = 1 ; i< n;++i)
{
int uu, vv;
cin >> uu >> vv;
p[uu].push_back(vv);
}
int A, B;
dis[1] = 0;dfs(1,0);A= far;
dis[far]= 0;dfs(far, 0); B =far;
int kk = B;
for(int i =0; i< (dis[B]+1)/2;++i) kk = fa[kk];memset(dis,0,sizeof(dis));
dfs2(kk, 0);
for(int i = 1; i<= n;++i) sel[i]= max_deep[i]- dis[i];
sort(sel+1, sel+1+n, cmp);
int ret = 0;
for(int i = k+1;i<= n;++i)ret= max(sel[i]+1, ret);
cout << sel[k+1];
return 0;
}