// Original C++ solution (slower):
#include <bits/stdc++.h>

using namespace std;

using Int = long long int;

template<typename T> void swap(T *t1, T *t2){ T* tmp=t1; t1=t2; t2=tmp;}





vector<Int> m[300002];

Int stts[300002];

Int arr[300002];



void dfs(Int u, Int val) {

    stts[u] = 1;

    arr[u] += val;

    for(Int i=0; i<m[u].size(); i++){

        if(stts[m[u][i]] == 0){

            dfs(m[u][i], arr[u]);

        }

    }

}



int main(){

    ios::sync_with_stdio(false);

    cin.tie(0);



    Int n, q, a, b;

    cin >> n >> q;

    Int p, x;



    // init

    for(Int i=0; i<n; i++){

        arr[i] = 0;

        stts[i] = 0;

    }



    for(Int i=0; i<n-1; i++){

        cin >> a >> b;

        m[a-1].push_back(b-1);

        m[b-1].push_back(a-1);

    }

    for(Int i=0; i<q; i++){

        cin >> p >> x;

        arr[p-1] += x;

    }

    dfs(0, 0);

    for(Int i=0; i<n; i++){

        cout << arr[i] << " ";

    }

    cout << endl;



    return 0;

}

// Optimized solution to the same problem (faster):
/**

 * code generated by JHelper

 * More info: https://github.com/AlexeyDmitriev/JHelper

 * @author champon

 */



#include <iostream>

#include <fstream>

#include<bits/stdc++.h>

#define se cout << "test ok" << endl;

#define sp << " " <<

#define enl "\n"

using namespace std;

using ll=long long;

using ld=long double;

ll mod = ll(1e9)+7;

ll inf = ll(1e18);

void bl(bool b, ostream& out=cout){ out << (b ? "Yes" : "No") << endl; }

void bl2(bool b, ostream& out=cout){ out << (b ? "YES" : "NO") << endl; }

template<typename T> inline bool chmax(T &a, T b){ if(a<b){a=b; return true;} return false; }

template<typename T> inline bool chmin(T &a, T b){ if(a>b){a=b; return true;} return false; }

int dx[] = {1, 0, -1, 0, 1, -1, 1, -1};

int dy[] = {0, 1, 0, -1, 1, -1, -1, 1};



#ifndef INCLUDE_DEBUG_HPP

#define INCLUDE_DEBUG_HPP



#include <iostream>

#include <vector>

#include <map>

using namespace std;



namespace dbg {

    using ll = long long;



    class Debug {

    public:

        Debug(){}

        template<typename T>

        void vd(vector<T> vec);

        template<typename T>

        void vd2(vector<vector<T>> vec);

        template<typename T>

        void ad(T *arr, ll n);

        template<typename T, size_t N>

        void ad2(T (&arr)[N], ll n);

        template<typename T>

        void md(T mp);

    };



    template<typename T>

    void Debug::vd(vector<T> vec) {

        for (auto vv : vec) cout << vv << " ";

        cout << endl;

    }



    template<typename T>

    void Debug::vd2(vector<vector<T>> vec) {

        for (auto vv : vec) {

            for (auto vvv : vv) cout << vvv << " ";

            cout << endl;

        }

    }



    template<typename T>

    void Debug::ad(T *arr, ll n) {

        for (int i = 0; i <= n; i++) cout << arr[i] << " ";

        cout << endl;

    }



    template<typename T, size_t N>

    void Debug::ad2(T (&arr)[N], ll n) {

        for (int i = 0; i <= N; i++) for (int j = 0; j <= n; j++) cout << arr[i][j] << " ";

        cout << endl;

    }



    template<typename T>

    void Debug::md(T mp) {

        cout << "key : value" << endl;

        for (auto const &m : mp) cout << m.first << " : " << m.second << endl;

        cout << endl;

    }



}



#endif //INCLUDE_DEBUG_HPP



using dbg::Debug;

Debug debug;



class DKi {

public:

    vector<vector<int>> g;

    vector<int> dist;

    vector<int> visited;



    void dfs(int u, int counter){

        visited[u] = 1;

        dist[u] += counter;

        for(auto& to : g[u]){

            if(visited[to]) continue;

            dfs(to, dist[u]);

        }

    }



	void solve(std::istream& in, std::ostream& out) {

	    ll n, q;

	    in >> n >> q;

        int a, b;

        g.assign(n, vector<int>());

        dist.assign(n, 0);

        for(int i=0; i<n-1; i++){

            in >> a >> b;

            --a; --b;

            g[a].push_back(b);

            g[b].push_back(a);

        }



        int p, x;

        for(int i=0; i<q; i++){

            in >> p >> x;

            --p;

            dist[p] += x;

        }



        visited.assign(n, 0);

        dfs(0, 0);

        for(int i=0; i<n; i++){

            out << dist[i] << " ";

        }

        out << enl;

	}

};





int main() {

    cin.tie(nullptr);

    ios_base::sync_with_stdio(false);

	DKi solver;

	std::istream& in(std::cin);

	std::ostream& out(std::cout);

	solver.solve(in, out);

	return 0;

}


// Fastest known solution for this problem: