#include <bits/stdc++.h>
#define re register int
#define max(x, y) (x > y ? x : y)
using namespace std;
const int N = 1e5 + 10, inf = - 100001;
struct Edge
{
int to, w, next;
}e[N << 1];
int top, h[N];
int n, k, ans, len = inf, pre[N], nex[N], maxs = inf;
inline void add(int x, int y, int w)
{
e[++ top] = (Edge){y, w, h[x]};
h[x] = top;
}
int dp(int u, int fa)
{
int d1 = 0, d2 = 0;
for (re i = h[u]; i; i = e[i].next)
{
int v = e[i].to, w = e[i].w;
if (v == fa) continue;
int d = dp(v, u) + w;
if (d > d1) d2 = d1, d1 = d;
else if (d > d2) d2 = d;
}
len = max(len, d1 + d2);
return d1;
}
void dfs(int u, int fa, int size, int & to, int & res, int type)
{
if (size > maxs)
{
maxs = size;
to = u;
if (type) res = size;
}
for (re i = h[u]; i; i = e[i].next)
{
int v = e[i].to;
if (v == fa) continue;
if (type) pre[v] = u;
dfs(v, u, size + e[i].w, to, res, type);
}
}
void draw_pre(int u)
{
for (re i = h[u]; i; i = e[i].next)
{
int v = e[i].to;
if (pre[u] == v)
{
e[i].w = -1;
nex[v] = u;
draw_pre(v);
}
}
}
void draw_nex(int u)
{
for (re i = h[u]; i; i = e[i].next)
{
int v = e[i].to;
if (nex[u] == v)
{
e[i].w = -1;
draw_nex(v);
}
}
}
inline void work()
{
if (k == 1)
{
dp(1, 0);
ans = 2 * (n - 1) - len + 1;
}
else
{
int p = 0, q = 0, L1 = 0, L2 = 0;
dfs(1, 0, 0, p, L1, 0);
dfs(p, 0, 0, q, L1, 1);
draw_pre(q);
draw_nex(p);
len = inf;
dp(1, 0);
L2 = len;
ans = 2 * n - L1 - L2;
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n >> k;
for (re i = 1; i < n; i ++)
{
int x, y; cin >> x >> y;
add(x, y, 1);
add(y, x, 1);
}
work();
cout << ans << '\n';
return 0;
}