传送门
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define ll long long
#define re register
inline void read(int &a)
{
a=0;
int d=1;
char ch;
while(ch=getchar(),ch>'9'||ch<'0')
if(ch=='-')
d=-1;
a=ch^48;
while(ch=getchar(),ch>='0'&&ch<='9')
a=(a<<3)+(a<<1)+(ch^48);
a*=d;
}
int f[201][201],r[201],head[201],num,p;
struct note
{
int to,next;
}edge[201];
inline void add(int u,int v)
{
edge[++num].next=head[u];
edge[num].to=v;
head[u]=num;
}
inline void dfs(int u,int fa)
{
for(re int i=head[u];i;i=edge[i].next)
{
if(edge[i].to!=fa)
{
dfs(edge[i].to,u);
for(re int j=p;j>=1;j--)
for(re int k=1;k<j;k++)
f[u][j]=min(f[u][j],f[edge[i].to][j-k]+f[u][k]-2);
}
}
}
int main()
{
int n;
read(n);
read(p);
for(re int i=1;i<n;i++)
{
int a,b;
read(a);
read(b);
r[a]++;
r[b]++;
add(a,b);
add(b,a);
}
memset(f,0x3f,sizeof(f));
for(re int i=1;i<=n;i++)
f[i][1]=r[i];
dfs(1,0);
int ans=f[1][p];
for(re int i=1;i<=n;i++)
ans=min(ans,f[i][p]);
printf("%d",ans);
return 0;
}