#include<bits/stdc++.h>
using namespace std;
#define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
#define fi first
#define se second

const int N = 1e5 + 7;
int n , cnt = 0 , k;
vector<int> a[N];
int tin[N] , h[N] , up[21][N];

void dfs(int u , int p){
    tin[u] = ++cnt;
    for (int v : a[u]) if (v != p){
        h[v] = h[u] + 1;
        up[0][v] = u;

        dfs(v , u);
    }
}

void inp(){
    cin >> n >> k;
    for (int i = 1 ; i < n ; ++i){
        int u , v;
        cin >> u >> v;
        ++u,++v;
        a[u].push_back(v);
        a[v].push_back(u);
    }

    h[1] = 1;
    dfs(1 , 0);

    for (int j = 1 ; j <= 20 ; ++j){
        for (int i = 1 ; i <= n ; ++i){
            up[j][i] = up[j - 1][up[j - 1][i]];
        }
    }
}

int lca(int u , int v){
    if (h[u] < h[v]) swap(u , v);

    for (int i = 20 ; i >= 0 ; --i) if(h[up[i][u]] >= h[v]){
        u = up[i][u];
    }

    if (u == v) return u;

    for (int i = 20 ; i >= 0 ; --i) if (up[i][u] != up[i][v]){
        u = up[i][u];
        v = up[i][v];
    }

    return up[0][u];
}

int d(int u , int v){
//    if (u == 0 || v == 0) return 0;
//    if (u == n + 1 || v == n + 1) return 0;
    int p = lca(u , v);

    return h[u] + h[v] - 2 * h[p];
}

int Cnt = 0;
set<pair<int , int>> st;

void Push(int id , int in){
    st.insert({in , id});
    if (st.size() == 1) return;
    auto it = st.lower_bound({in , id});
    auto it2 = it;
    ++it2;

    if (it == st.begin()){
        auto it1 = st.rbegin();

        if (st.size() > 2) Cnt -= d(it1->se , it2->se);
        Cnt += d(it->se , it2->se);
        Cnt += d(it->se , it1->se);
        return;
    }
    if (it2 == st.end()){
        it2 = st.begin();
        auto it1 = it;
        --it1;

        if (st.size() > 2) Cnt -= d(it1->se , it2->se);
        Cnt += d(it->se , it2->se);
        Cnt += d(it->se , it1->se);
        return;
    }

    auto it1 = it;
    --it1;
    Cnt -= d(it1->se , it2->se);
    Cnt += d(it->se , it2->se);
    Cnt += d(it->se , it1->se);
}

void Erase(int id , int in){
    auto it = st.lower_bound({in , id});
    if (st.size() == 1){
        st.erase(it);
        return;
    }
    auto it2 = it;
    ++it2;

    if (it == st.begin()){
        auto it1 = st.rbegin();

        if (st.size() > 2) Cnt += d(it1->se , it2->se);
        Cnt -= d(it->se , it2->se);
        Cnt -= d(it->se , it1->se);
        st.erase(it);
        return;
    }
    if (it2 == st.end()){
        it2 = st.begin();
        auto it1 = it;
        --it1;

        if (st.size() > 2) Cnt += d(it1->se , it2->se);
        Cnt -= d(it->se , it2->se);
        Cnt -= d(it->se , it1->se);
        st.erase(it);
        return;
    }

    auto it1 = it;
    --it1;
    Cnt += d(it1->se , it2->se);
    Cnt -= d(it->se , it2->se);
    Cnt -= d(it->se , it1->se);

    st.erase(it);
}

void solve(){
    int i = 1 , j = 1 , res = 1;

    Push(1  , tin[1]);
    while (i <= n){
        while (j < n && Cnt <= k * 2){
            ++j;
            Push(j , tin[j]);
        }
        if (Cnt > k * 2){
            Erase(j , tin[j]);
            --j;
        }

        res = max(res , j - i + 1);
        Erase(i , tin[i]);
        ++i;
    }

    cout << res;
}

int main(){
//    freopen("difmax.inp" , "r" , stdin);
//    freopen("difmax.out" , "w" , stdout);
    faster;
    inp();
    solve();
    return 0;
}
