#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e5+10;
struct node{
    int v,next;
}e[N<<1];
int n,s,tot,ans,head[N];
int f[N],a[N];
void add(int x,int y){
    e[++tot].v=y;
    e[tot].next=head[x];
    head[x]=tot;
}
void dfs(int u,int fa,int num){
    int cnt=0;
    for(int i=head[u];i;i=e[i].next) if(e[i].v!=fa) dfs(e[i].v,u,num);
    for(int i=head[u];i;i=e[i].next) if(e[i].v!=fa) a[++cnt]=f[e[i].v]+1;
    sort(a+1,a+cnt+1);
    while (cnt&&a[cnt]+a[cnt-1]>num) cnt--,ans++;
    f[u]=a[cnt];
}
inline bool check(int x){
    ans=0;
    dfs(1,0,x);
    return ans<=s;
}
int main(){
    scanf("%d%d",&n,&s);
    for(int i=1,x,y;i<n;i++) scanf("%d%d",&x,&y),add(x,y),add(y,x);
    int l=1,r=n;
    while(l<r){
        int mid=l+r>>1;
        if(check(mid)) r=mid;
        else l=mid+1;
    }
    printf("%d\n",l);
    return 0;
}