n,m = map(int,input().split()) edgs = [] for i in range(m): a,b = map(int,input().split()) edgs.append((a,b)) q = int(input()) query = [] use = {} use_set = set() for i in range(q): a,b,c = map(int,input().split()) query.append((a,b,c)) use[b] = [] use_set.add(b) if c != -1: use[c] = [] use_set.add(c) graph = {} for i in use_set: graph[i] = set() for a,b in edgs: if a in use_set and b in use_set: graph[a].add(b) p = {} for i in use_set: p[i] = True syoki = n-len(use_set) for a,b,c in query: if a == 1: if c in graph[b]: graph[b].discard(c) else: graph[b].add(c) else: if p[b]: p[b] = False else: p[b] = True ans = syoki for i in use_set: if i in graph[b] or p[i] or i == b: ans += 1 print(ans-1)