#include<bits/stdc++.h>
#include<cmath>
#define ll long long
#define For(i,a,b) for(int i=a;i<=b;i++)
#define Rof(i,a,b) for(int i=a;i>=b;i--)
#define N 100010
#define pb push_back
#define ls x<<1
#define rs x<<1|1
#define lson ls,l,mid
#define rson rs,mid+1,r
#define SP fixed<<setprecision(15)
using namespace std;
struct node{
int v,w;
};
vector<node>e[N];
int n,k,zj1=0,zj2=0;
ll read(){
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
int dep[N],f[N],bj[N];
int mx=0,mx2=0;
void dfs1(int u,int fa){
dep[u]=dep[fa]+1;
f[u]=fa;
if(dep[u]>dep[mx]) mx=u;
for(int i=0;i<e[u].size();i++){
int v=e[u][i].v;
if(v==fa) continue;
dfs1(v,u);
}
}
void dfs2(int u,int fa){
dep[u]=dep[fa]+1;
if(dep[u]>dep[mx2]) mx2=u;
for(int i=0;i<e[u].size();i++){
int v=e[u][i].v;
if(v==fa) continue;
dfs2(v,u);
}
}
void dfs3(int u,int fa){
for(int i=0;i<e[u].size();i++){
int v=e[u][i].v;
if(bj[v]) e[u][i].w=-1;
if(v==fa) continue;
dfs3(v,u);
}
}
int now[N];
void dfs4(int u,int fa){
int m1=0,m2=0;
for(int i=0;i<e[u].size();i++){
int v=e[u][i].v;
if(v==fa) continue;
dfs4(v,u);
if(e[u][i].w+now[v]>m1) m2=m1,m1=e[u][i].w+now[v];
else if(e[u][i].w+now[v]>m2) m2=e[u][i].w+now[v];
}
now[u]=m1;
zj2=max(zj2,m1+m2);
}
int main()
{
//freopen("patrol.in","r",stdin);
//freopen("patrol.out","w",stdout);
n=read(),k=read();
For(i,1,n-1){
int u=read(),v=read();
e[u].pb({v,1});
e[v].pb({u,1});
}
dfs1(1,0);
dfs2(mx,0);
zj1=dep[mx2]-1;
if(k==1){
cout<<(n-1)*2-zj1+1<<endl;
return 0;
}
while(mx){
bj[mx]=1;
mx=f[mx];
}
while(mx2){
bj[mx2]=1;
mx2=f[mx2];
}
dfs3(1,0);
dfs4(1,0);
cout<<n*2-zj1-zj2<<endl;
return 0;
}
rt