#include <bits/stdc++.h>
using namespace std;
int st[100005], ed[100005];
int dep[100005];
vector<int> gh[100005];
vector<pair<int, int> > vec[100005];
int tdfn, n, m;
int cntv[100005 << 2];
int sumv[100005 << 2];
int key[100005];
void build(int rt, int L, int R) {
  sumv[rt] = 0;
  cntv[rt] = 0;
  if (L == R) {
    return;
  }
  int mid = L + R >> 1;
  build(rt << 1, L, mid);
  build(rt << 1 | 1, mid + 1, R);
}
void push_up(int rt, int L, int R) {
  if (cntv[rt])
    sumv[rt] = R - L + 1;
  else {
    if (L < R)
      sumv[rt] = sumv[rt << 1] + sumv[rt << 1 | 1];
    else
      sumv[rt] = 0;
  }
}
void update(int rt, int L, int R, int l, int r, int v) {
  if (l <= L && R <= r) {
    if (v)
      cntv[rt]++;
    else
      cntv[rt]--;
    push_up(rt, L, R);
    return;
  }
  int mid = L + R >> 1;
  if (l <= mid) update(rt << 1, L, mid, l, r, v);
  if (r > mid) update(rt << 1 | 1, mid + 1, R, l, r, v);
  push_up(rt, L, R);
}
void gao(int u, int fa, int d) {
  dep[u] = d;
  st[u] = tdfn++;
  for (int i = 0; i < gh[u].size(); i++) {
    int v = gh[u][i];
    if (v == fa) continue;
    gao(v, u, d + 1);
  }
  ed[u] = tdfn - 1;
}
void dfs(int u, int fa) {
  for (int i = 0; i < vec[u].size(); i++) {
    int v = vec[u][i].second;
    update(1, 1, n, st[v], ed[v], 1);
  }
  if (vec[u].size() > 0) update(1, 1, n, st[u], ed[u], 1);
  if (sumv[1]) key[u] = sumv[1] - 1;
  for (int i = 0; i < gh[u].size(); i++) {
    int v = gh[u][i];
    if (v == fa) continue;
    dfs(v, u);
  }
  for (int i = 0; i < vec[u].size(); i++) {
    int v = vec[u][i].second;
    update(1, 1, n, st[v], ed[v], 0);
  }
  if (vec[u].size() > 0) update(1, 1, n, st[u], ed[u], 0);
}
int main() {
  tdfn = 1;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    gh[a].push_back(b);
    gh[b].push_back(a);
  }
  gao(1, -1, 0);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    if (dep[a] < dep[b]) swap(a, b);
    if (2 == 3) {
      vec[a].push_back(make_pair(1, b));
    } else {
      vec[a].push_back(make_pair(2, b));
      vec[b].push_back(make_pair(2, a));
    }
  }
  dfs(1, -1);
  for (int i = 1; i <= n; i++) {
    printf("%d ", key[i]);
  }
  puts("");
  return 0;
}
