#include<bits/stdc++.h>
using namespace std; using ll=long long;
int n, m, ans, tim;
vector<int> te[2005], bu, bv;
int tin[2005], out[2005], dep[2005];
void df1(int u, int p) {
tin[u] = ++tim;
for(int v : te[u]) if(v != p) df1(v, u);
out[u] = tim;
}
void df2(int u, int p, int d) {
dep[u] = d;
for(int v : te[u]) if(v != p) df2(v, u, d + 1);
}
int dp(int u, int p) {
int mx = -1, sz = bu.size();
for(int i = 0; i < sz; ++i) {
if(bu[i] == u && dep[bv[i]] < dep[u]) mx = max(mx, dep[bv[i]]);
if(bv[i] == u && dep[bu[i]] < dep[u]) mx = max(mx, dep[bu[i]]);
}
for(int v : te[u]) if(v != p) mx = max(mx, dp(v, u));
if(mx == dep[u] - 1 && p != 0) { ans++; return -1; }
return mx;
}
int main() {
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if(!(cin >> n >> m)) return 0;
for(int i = 1, u, v; i <= m; ++i) {
cin >> u >> v;
if(i < n) { te[u].push_back(v); te[v].push_back(u); }
else { bu.push_back(u); bv.push_back(v); }
}
int rt = 1, sz = bu.size();
for(int i = 1; i <= n; ++i) {
tim = 0; df1(i, 0); int ok = 1;
for(int j = 0; j < sz; ++j) {
int u = bu[j], v = bv[j];
bool a1 = (tin[u] <= tin[v] && out[u] >= out[v]);
bool a2 = (tin[v] <= tin[u] && out[v] >= out[u]);
if(!a1 && !a2) { ok = 0; break; }
}
if(ok) { rt = i; break; }
}
df2(rt, 0, 1); dp(rt, 0);
cout << ans << '\n';
return 0;
}