#include <iostream>
#include <fstream>
#include <cstdio>
#include <cassert>
#include <complex>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <numeric>
#include <sstream>
#include <ctime>
#include <cctype>
#include <set>
#include <map>
#include <queue>
#include <bitset>
#include <deque>
#include <stack>
#include <memory.h>
using namespace std;
#define ll long long 
int n,k;
vector<int> nei[2050];
int dis[2050][2050];
bool crash[2050][2050];
int cnum[2050]; 
void bfs(int root){
	queue<int> q;
	dis[root][root]=0;
	q.push(root); 
	while(!q.empty()){
		int last=q.front();
		q.pop();
		for(int i=0;i<nei[last].size();i++){
			if(dis[root][nei[last][i]]==-1){
				dis[root][nei[last][i]]=dis[root][last]+1;
				q.push(nei[last][i]);
			}
		}
	}
}
bool nocrash(){
	for(int i=0;i<n;i++){
		if(cnum[i]>0) return false;
	}
	return true;
}
int main(){
	cin>>n>>k;
	for(int i=0;i<n-1;i++){
		int a,b;
		cin>>a>>b;
		a--;b--;
		nei[a].push_back(b);
		nei[b].push_back(a);
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			dis[i][j]=-1;
		}
	}
	for(int i=0;i<n;i++){
		bfs(i);
	}
	for(int i=0;i<n;i++){
		int num=0;
		for(int j=0;j<n;j++){
			if(dis[i][j]>k){
				crash[i][j]=true;
				num++;
			}
		}
		cnum[i]=num;
	}
	while(!nocrash()){
		int mx=-1,imx=-1;
		for(int i=0;i<n;i++){
			if(cnum[i]>mx){
				mx=cnum[i];
				imx=i;
			}
		}
		for(int i=0;i<n;i++){
			 crash[imx][i]=false;
			 if(crash[i][imx]){
			 	crash[i][imx]=false;
			 	cnum[i]--;
			 }
		}
		cnum[imx]=-2;
		ans++;
	}
	cout<<ans;
	return 0;
}