#include <bits/stdc++.h>
using namespace std;
long long power(long long b, long long e, long long m) {
  if (e == 0) return 1;
  if (e & 1) return b * power(b * b % m, e / 2, m) % m;
  return power(b * b % m, e / 2, m);
}
long long power(long long b, long long e) {
  if (e == 0) return 1;
  if (e & 1) return b * power(b * b, e / 2);
  return power(b * b, e / 2);
}
vector<vector<int>> v;
vector<bool> check;
vector<set<int>> s;
int mx = 0;
vector<int> se;
set<int> s1, s2;
void dfs(int x) {
  check[x] = true;
  se.push_back(x);
  for (auto i : v[x]) {
    if (!check[i]) {
      dfs(i);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  v.resize(n + 1);
  check.resize(n + 1);
  s.resize(n + 1);
  int a, b;
  for (int i = 0; i < m; i++) {
    cin >> a >> b;
    v[a].push_back(b);
    v[b].push_back(a);
  }
  int k;
  cin >> k;
  for (int i = 0; i < k; i++) {
    cin >> a >> b;
    s[a].insert(b);
    s[b].insert(a);
  }
  for (int i = 1; i <= n; i++) {
    if (!check[i]) {
      dfs(i);
    }
    int f = 1;
    for (int i = 0; i < se.size(); i++) {
      for (int j = i + 1; j < se.size(); j++) {
        if (s[se[i]].count(se[j])) {
          f = 0;
        }
      }
    }
    if (f == 1)
      mx = max(mx, (int)se.size() - min((int)s1.size(), (int)s2.size()));
    se.clear();
    s1.clear();
    s2.clear();
  }
  cout << mx;
  return 0;
}
