#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=200005;
inline int read(){
int x=0;char ch=getchar();
while(!isdigit(ch)) ch=getchar();
while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
return x;
}
int n,k;
int hd[N<<1],tot;
struct edge{
int to,nxt,w;
}e[N<<1];
inline void add(int x,int y){
e[++tot].to=y;e[tot].w=1;e[tot].nxt=hd[x];hd[x]=tot;
}
struct node{
int x,y;
}bian[N];
int p,d[N],f[N];
int ans,L1=0,L2=0;
void dfs(int x,int fa){
if(ans<d[x]) ans=d[x],p=x;
for(int i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa) continue;
d[y]=d[x]+1;
f[y]=d[y];
dfs(y,x);
f[x]=max(f[x],f[y]);
}
}
void find(int x){
d[x]=0;
ans=0;
dfs(x,0);
}
int f1[N],f2[N];
void dp(int x,int fa){
for(int i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa) continue;
dp(y,x);
if(f1[x]<f1[y]+e[i].w){
f2[x]=f1[x];
f1[x]=f1[y]+e[i].w;
}else if(f2[x]<f1[y]+e[i].w)
f2[x]=f1[y]+e[i].w;
L2=max(L2,f1[x]+f2[x]);
}
}
int main(){
n=read();k=read();
for(int i=1,x,y;i<n;i++){
x=read();y=read();
bian[i].x=x;bian[i].y=y;
add(x,y);add(y,x);
}
find(1);
find(p);
L1=ans;
if(k==1){
printf("%d\n",2*n-L1-1);
}else{
memset(d,0,sizeof(d));
for(int i=1;i<n;i++){
if(f[bian[i].x]==L1&&f[bian[i].y]==L1)
{e[i*2].w=-1;e[i*2-1].w=-1;}
}
dp(1,0);
printf("%d\n",2*n-L1-L2);
}
return 0;
}
第六个点和答案差1