#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=2e5+10,M=N*2;
int h[N],e[M],ne[M],idx;
int dist[N];
int dis[N];
int dmax[N];
int maxl[N];
int n,k,L,R,D;
bool st[N];
int q[N];
int path[N],top;
int res;
int hh,tt;
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
PII bfs(int S,int b){
for(int i=0;i<=tt;i++) dist[q[i]]=0x3f3f3f3f;
hh=0,tt=-1;
q[++tt]=S,dist[S]=0;
int res=S;
while(hh<=tt)
{
int t=q[hh++];
if(dist[t]>dist[res]) res=t;
for(int i=h[t];~i;i=ne[i])
{
int j=e[i];
if(st[j]&&j!=b) continue;
if(dist[j]>dist[t]+1)
{
dist[j]=dist[t]+1;
q[++tt]=j;
}
}
}
return {res,dist[res]};
}
bool dfs(int u){
st[u]=true;
path[++top]=u;
if(u==R) return true;
for(int i=h[u];~i;i=ne[i])
{
int j=e[i];
if(st[j]) continue;
if(dfs(j)) return true;
}
st[u]=false;
top--;
return false;
}
int main()
{
memset(h,-1,sizeof h);
memset(dist,0x3f,sizeof dist);
scanf("%d%d",&n,&k);
for(int i=1;i<n;i++)
{
int a,b;
scanf("%d%d",&a,&b);
add(a,b),add(b,a);
}
L=bfs(1,-1).first;
PII y=bfs(L,-1);
R=y.first,D=y.second;
memcpy(dis,dist,sizeof dist);
res=(n-1)*2-D+1;
if(k==1)
{
printf("%d",res);
return 0;
}
dfs(L);
int ans=0x3f3f3f3f;
for(int j=1;j<=top;j++)
{
int i=path[j];
auto y=bfs(i,-1);
int x=y.first,len_d=y.second;
maxl[i]=len_d;
y=bfs(x,i);
ans=min(ans,res-y.second+1);
}
int gmaxl=-0x3f3f3f3f,maxv=-0x3f3f3f3f;
for(int j=1;j<=top;j++)
{
int i=path[j];
int gl=maxl[i]+dis[i],gr=maxl[i]+(D-dis[i]);
maxv=max(gr+gmaxl-D-1,maxv);
gmaxl=max(gmaxl,gl);
}
ans=min(ans,ans-maxv);
printf("%d",ans);
return 0;
}