#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:6031)
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
typedef pair<int, int>PII;
const int N = 1e4+10;
vector<PII>g[N];
int a1[N];
int n, m;
bool dfs(int x,int y, int u,int father)//x是起点,y是终点,u是当前点
{
if (y == u)
{
return 1;
}
for (int i = 0; i < g[u].size(); i++)
{
int son = g[u][i].first;
if (son == father)
{
continue;
}
int w = g[u][i].second;
if (dfs(x, y, son, u))
{
a1[w]++;
return 1;
}
}
return false;
}
void solve()
{
cin >> n >> m;
for (int i = 1; i <n; i++)//建图
{
int x, y;
cin >> x >> y;
g[x].push_back({ y,i });
g[y].push_back({ x,i });
}
for (int i = 1; i <= m; i++)
{
int x, y;
cin >> x >> y;
dfs(x, y, x, -1);
}
int ans = -1;
for (int i = n - 1; i >= 1; i--)//从头开始遍历要写成i--
{
if (a1[i] == m)
{
ans += i + 1;
break;
}
}
cout << ans << endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 1;
//cin>>t;
while (t--)
{
solve();
}
return 0;
}
//在遍历寻找到答案的时候,有两种操作,第一,将答案存入一个容器中,第二创建一个数组,将答案对应的编号打上
//标记,就是加一
/*
关于dfs
问题一
你的dfs是干嘛的
问题2
终止条件是什么
问题3
运行逻辑是什么
问题4
运行逻辑里我需要哪些参数,dfs函数要写哪些参数
*/