#include <cstdio> 
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; 
const int N = 2100;
struct Edge {
	int to;
	Edge *next;
}*h[N], e[N<<1];
int _;
int u[N], v[N];
int tmp = 0;
void add(int u, int v) {
	Edge *tmp = &e[++_];
	tmp->to=v;
	tmp->next = h[u];
	h[u]=tmp;

	tmp = &e[++_];
	tmp->to=u;
	tmp->next = h[v];
	h[v]=tmp;
}
void dfs(int p, int fa, int dep) {
	tmp++;
	if(!dep) return;
	for(Edge *i=h[p];i;i=i->next) {
		if(i->to!=fa)dfs(i->to,p,dep-1);
	}
}
int main() {
	int n, k;
	scanf("%d%d", &n, &k);
	for(int i=2;i<=n;i++) {
		scanf("%d%d", &u[i], &v[i]);
		add(u[i], v[i]);
	}
	int ans = 0;
	if(k&1) {
		for(int i=2;i<=n;i++) {
			tmp = 0;
			dfs(u[i], v[i], k/2);
			dfs(v[i], u[i], k/2);
			ans = max(ans, tmp);
		}
	}
	else {
		for(int i=1;i<=n;i++) {
			tmp = 0;
			dfs(i, 0, k/2);
			ans = max(ans, tmp);
		}
	}
	printf("%d\n", n-ans);
}
