#include <bits/stdc++.h>
using namespace std;
#define MAXN 100001
struct edge
{
int to,nex;
}Edge[MAXN<<1];
int head[MAXN],cnt;
void add(int u,int v)
{
Edge[cnt].nex=head[u];
Edge[cnt].to=v;
head[u]=cnt++;
}
int n,k,lg[MAXN],d[MAXN],a[MAXN];
int fa[MAXN][21],depth[MAXN];
void dfs(int now,int fath)
{
fa[now][0]=fath,depth[now]=depth[fath]+1;
for(int i=1;i<=lg[depth[now]];i++)
fa[now][i]=fa[fa[now][i-1]][i-1];
for(int i=head[now];i!=-1;i=Edge[i].nex)
if(Edge[i].to!=fath)
dfs(Edge[i].to,now);
}
int lca(int x,int y)
{
if(depth[x]<depth[y]) swap(x,y);
while(depth[x]>depth[y])
x=fa[x][lg[depth[x]-depth[y]]];
if(x==y) return y;
for(int i=lg[depth[x]];i>=0;i--)
if(fa[x][i]!=fa[y][i])
x=fa[x][i],y=fa[y][i];
return fa[x][0];
}
void dd(int now,int fath)
{
for(int i=head[now];i!=-1;i=Edge[i].nex)
if(Edge[i].to!=fath)
{
dd(Edge[i].to,now);
d[now]+=d[Edge[i].to];
}
}
int x[MAXN],y[MAXN];
int main()
{
memset(head,-1,sizeof(head));
cin>>n>>k;
for(int i=2;i<=n;i++)
lg[i]=lg[i>>1]+1;
int a1,a2;
for(int i=1;i<=n-1;i++)
{
cin>>x[i]>>y[i];
add(x[i],y[i]);
add(y[i],x[i]);
}
dfs(1,0);
for(int i=1;i<=k;i++)
{
cin>>a1>>a2;
d[lca(a1,a2)]-=2;
d[a1]++,d[a2]++;
}
dd(1,0);
for(int i=1;i<=n-1;i++)
cout<<(depth[x[i]] > depth[y[i]] ? d[x[i]] : d[y[i]])<<' ';
}