#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> const int LMT=100003; using namespace std; struct line { int u,v,next; }e[LMT<<1]; int next[LMT],pos[LMT],have[LMT],no[LMT],all,elem; bool vis[LMT]; void insert(int u,int v) { e[all].u=u; e[all].v=v; e[all].next=next[u]; next[u]=all++; } void dfs(int u) { vis[u]=1; pos[u]=elem; have[elem]++; for(int x=next[u];x!=-1;x=e[x].next) if(!vis[e[x].v])dfs(e[x].v); } int main() { int n,m,a,b,ans=0; cin>>n>>m; memset(next,-1,sizeof(next)); while(m--) { scanf("%d%d",&a,&b); a--;b--; insert(a,b); insert(b,a); } for(int i=0;i<n;i++) if(0==vis[i]) { dfs(i); elem++; } cin>>m; while(m--) { scanf("%d %d",&a,&b); a--;b--; if(pos[a]==pos[b])no[pos[a]]=1; } for(int i=0;i<elem;i++) if(!no[i])ans=max(ans,have[i]); cout<<ans<<endl; return 0; }