"use strict"
class Node{
    constructor(number, value){
        this.number = number
        this.value = value
        this.nextNodeList = []
    }
    addNextNode(nextNode){
        this.nextNodeList.push(nextNode)
    }
    addValue(value){
        this.value += value
        for(var node=0; node < this.nextNodeList.length; node++)
        {
            this.nextNodeList[node].addValue(value)
        }
    }
}

// inputに入力データ全体が入る
function Main(input) {
	// 1行目がinput[0], 2行目がinput[1], …に入る
	var input = input.split("\n");
    var tmp = input[0].split(" ");
    var N = Number(tmp[0])
    var Q = Number(tmp[1])

    var a = []
    var b = []
    for(var i=0; i<N-1; i++)
    {
        var tmp2 = input[1+i].split(" ")
        a.push(Number(tmp2[0]))
        b.push(Number(tmp2[1]))
    }

    var p = []
    var x = []
    for(var i=0; i<Q; i++)
    {
        var tmp2 = input[N+i].split(" ")
        p.push(Number(tmp2[0]))
        x.push(Number(tmp2[1]))
    }

    // 木をつくる
    var nodelist = []
    for(var i=1; i<=N; i++)
    {
        nodelist.push(new Node(i,0))
    }
    // console.log(nodelist)

    // 辺を結ぶ
    for(var i=0; i<N-1; i++)
    {
        nodelist[a[i]-1].addNextNode(nodelist[b[i]-1])
    }
    // console.log(nodelist)

    // 値を足す
    for(var i=0; i<Q; i++)
    {
        nodelist[p[i]-1].addValue(x[i])
    }

    // console.log(nodelist)
    for(var node in nodelist)
    {
        process.stdout.write(nodelist[node].value + " ")
    }

}
//*この行以降は編集しないでください（標準入出力から一度に読み込み、Mainを呼び出します）
Main(require("fs").readFileSync("/dev/stdin", "utf8"));