#include <bits/stdc++.h>
using namespace std;
int n,k;
int dis[100001],f[100001],way[100001],diss[100001];
map <int,bool> mp;
struct node{
int end,len;
};
vector <node> ed[100001];
int s=0,sx=0,sxx=0;
void dfs(int x){
for(int i=0;i<ed[x].size();i++){
if(f[ed[x][i].end]==0){
f[ed[x][i].end]=1;
dis[ed[x][i].end]=dis[x]+1;
dfs(ed[x][i].end);
}
}
}
void dfs1(int x,int now){
for(int i=0;i<ed[x].size();i++){
if(f[ed[x][i].end]==0){
f[ed[x][i].end]=x;
dis[ed[x][i].end]=dis[x]+1;
way[now]=ed[x][i].end;
dfs1(ed[x][i].end,now+1);
}
}
}
int dpmx;
void trdp(int x,int fa){
for(int i=0;i<ed[x].size();i++){
if(fa==ed[x][i].end){
continue;
}
trdp(ed[x][i].end,x);
dpmx=max(dpmx,ed[x][i].len+diss[x]+diss[ed[x][i].end]);
diss[x]=max(diss[x],diss[ed[x][i].end]+ed[x][i].len);
}
}
void again(){
for(int i=0;;i++){
mp[way[i]]=1;
if(way[i]==sxx){
break;
}
}
for(int i=1;i<=n;++i)
if(mp.count(i)==1)
for(int j=0;j<ed[i].size();j++)
if(mp.count(ed[i][j].end)==1)
ed[i][j].len=-1;
trdp(1,0);
}
int main(){
cin>>n>>k;
int x,y;
for(int i=1;i<n;i++){
cin>>x>>y;
ed[x].push_back({y,1});
ed[y].push_back({x,1});
}
f[1]=-1;
dfs(1);
for(int i=1;i<=n;i++){
if(dis[i]>s){
s=dis[i];
sx=i;
}
}
memset(dis,0,sizeof(dis));
memset(f,0,sizeof(f));
f[sx]=-1;
way[0]=sx;
dfs1(sx,1);
s=0;
for(int i=1;i<=n;i++){
if(dis[i]>s){
s=dis[i];
sxx=i;
}
}
if(k==2){
again();
cout<<2*n-s-dpmx;
return 0;
}
cout<<n*2-s-1;
}