#include<bits/stdc++.h>
using namespace std;
const int M=1e5+10;
struct edge{
int to,ne,w;
}e[M<<1];
int h[M],idx;
void add(int a,int b,int w){
e[idx].to=b,e[idx].w=w,e[idx].ne=h[a],h[a]=idx++;
}
int n,k,x,y,l,r,len_first,len_second;
int dist[M],vis[M],fl[M],f[M];
bool flag_dfs_second=false;
void dfs_first(int u,int fa,int d){
dist[u]=d;
for(int i=h[u];~i;i=e[i].ne){
int v=e[i].to,w=e[i].w;
if(v==fa) continue;
dfs_first(v,u,d+w);
}
}
void find(int flag){
int id;
for(int i=1;i<=n;i++){
if(len_first<dist[i]){
len_first=dist[i];
id=i;
}
}
if(!flag) l=id;
else r=id;
}
void dfs_second(int u,int fa,int goal){
if(flag_dfs_second) return;
for(int i=h[u];~i;i=e[i].ne){
int v=e[i].to;
if(flag_dfs_second) return;
if(v==fa) continue;
if(v==goal){
fl[u]=v;
flag_dfs_second=true;
return;
}
fl[u]=v;
dfs_second(v,u,goal);
if(flag_dfs_second) return;
}
}
void reset(){
for(int i=l;i!=r;i=fl[i]){
vis[i]=1;
}
vis[r]=1;
for(int i=1;i<=n;i++){
if(vis[i]){
for(int j=h[i];~j;j=e[j].ne){
int v=e[j].to;
if(vis[v]){
e[j].w=-1;
}
}
}
}
}
void dfs_dp(int u){
for(int i=h[u];~i;i=e[i].ne){
int v=e[i].to,w=e[i].w;
if(vis[v]) continue;
vis[v]=1;
dfs_dp(v);
len_second=max(len_second,f[u]+f[v]+w);
f[u]=max(f[u],f[v]+w);
}
}
int main(){
cin.tie(0),cout.tie(0);
memset(h,-1,sizeof(h));
cin>>n>>k;
for(int i=1;i<n;i++){
cin>>x>>y;
add(x,y,1),add(y,x,1);
}
dfs_first(1,-1,0);
find(0);
dfs_first(l,-1,0);
find(1);
if(k==1){
cout<<(2*(n-1)-len_first+1);
}else{
memset(vis,0,sizeof(vis));
dfs_second(l,-1,r);
reset();
vis[1]=1;
dfs_dp(1);
cout<<(2*n-len_first-len_second);
}
return 0;
}