#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int n,k,head[maxn],d[maxn],id,ans,mx;
struct way{
int from,pre,id,next;
}a[maxn];
struct find{
int from,step;
}dis[maxn];
queue<int> f;
void add(int x,int y){
a[++id].id=y;
a[id].from=x;
a[id].pre=1;
a[id].next=head[x];
head[x]=id;
}
int bfs(int x){
memset(dis,0,sizeof(dis));
f.push(x);
dis[x].step=0;
while(!f.empty()){
int now=f.front();f.pop();
for(int i=head[now];i;i=a[i].next){
if(dis[a[i].id].step||a[i].id==x)
continue;
f.push(a[i].id);
dis[a[i].id].step=dis[now].step+1;
dis[a[i].id].from=i;
}
}
int mxid=1;
for(int i=2;i<=n;++i)
if(dis[i].step>dis[mxid].step)
mxid=i;
return mxid;
}
void update(int now){
if(now==0)
return;
a[dis[now].from].pre=-1;
if(dis[now].from%2==1)
a[dis[now].from+1].pre=-1;else
a[dis[now].from-1].pre=-1;
update(a[dis[now].from].from);
}
void dp(int x){
d[x]=1;
for(int i=head[x];i;i=a[i].next){
if(d[a[i].id])
continue;
dp(a[i].id);
mx=max(mx,d[x]+d[a[i].id]+a[i].pre);
d[x]=max(d[x],d[a[i].id]+a[i].pre);
}
}
int main(){
cin>>n>>k;
for(int i=1;i<n;++i){
int x,y;
cin>>x>>y;
if(x>y)
swap(x,y);
add(x,y);
add(y,x);
}
int x=bfs(1);
int y=bfs(x);
ans=n*2-1-dis[y].step;
if(k==1){
cout<<ans;
return 0;
}
update(y);
cout<<ans-mx+1;
}