#include <bits/stdc++.h>
using namespace std;
#define faster ios_base::sync_with_stdio(false); cin.tie(NULL)
#define Bit(mask , i) ((mask >> i) & 1)
#define fi first
#define se second
#define _LOG2(nl) 31 - __builtin_clz(nl)
#define c_bit(nl) __builtin_popcount(nl)
#define ii pair<long long , int>
#define lll pair<long long , pair<long long , long long>>
#define lii pair<long long , pair<long long , int>>
#define iii pair<int , pair<int , int>>
#define iiii pair<pair<int , int> , pair<int , int>>
#define llll pair<pair<__int128 , __int128> , pair<__int128 , __int128>>
#define li pair<long long , int>
#define db long double
#define onBit(mask , i) (mask | (1 << i))
#define offBit(mask , i) (mask & (~(1 << i)))

const int N = 1e5 + 7;
int n , cnt = 0 , q;
vector<pair<int , int>> a[N];
int tin[N] , h[N] , up[21][N];
long long Val[N];
bool vit[N];

void dfs(int u , int p){
    tin[u] = ++cnt;
    for (auto &c : a[u]) if (c.fi != p){
        int v = c.fi;
        h[v] = h[u] + 1;
        Val[v] = Val[u] + c.se;
        up[0][v] = u;

        dfs(v , u);
    }
}

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

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

    for (int j = 1 ; j <= 17 ; ++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 = _LOG2(h[u]) ; i >= 0 ; --i) if(h[up[i][u]] >= h[v]){
        u = up[i][u];
    }

    if (u == v) return u;

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

    return up[0][u];
}

long long 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 Val[u] + Val[v] - (1LL * 2) * Val[p];
}

long long 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(){
    while (q--){
        int u;
        cin >> u;
        if (!vit[u]){
            vit[u] = 1;
            Push(u , tin[u]);
        }
        else{
            vit[u] = 0;
            Erase(u , tin[u]);
        }

        cout << Cnt << '\n';
    }
}

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