#include <bits/stdc++.h>
using namespace std;
struct point {
  int a, b;
} p1[50], p2[50];
int cmp(point x, point y) {
  int cnt = 0;
  if (x.a == y.a) cnt++;
  if (x.b == y.a) cnt++;
  if (y.b == x.a) cnt++;
  if (y.b == x.b) cnt++;
  return cnt;
}
int num(point x, point y) {
  if (x.a == y.a) return x.a;
  if (x.b == y.a) return x.b;
  if (y.b == x.a) return x.a;
  if (y.b == x.b) return x.b;
}
int main() {
  set<int> s;
  int n, m;
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%d %d", &p1[i].a, &p1[i].b);
  for (int i = 0; i < m; i++) scanf("%d %d", &p2[i].a, &p2[i].b);
  int a1 = 0, b1 = 0;
  for (int i = 0; i < n; i++) {
    int tep = 0;
    int flag = -1;
    for (int k = 0; k < m; k++) {
      if (cmp(p1[i], p2[k]) == 1) {
        if (flag == -1) {
          flag = num(p1[i], p2[k]);
          tep++;
        } else {
          if (flag != num(p1[i], p2[k])) {
            tep++;
          }
        }
      }
    }
    if (tep > 1) {
      printf("-1\n");
      return 0;
    } else if (tep == 1) {
      s.insert(flag);
    }
  }
  for (int i = 0; i < m; i++) {
    int tep = 0;
    int flag = -1;
    for (int k = 0; k < n; k++) {
      if (cmp(p1[k], p2[i]) == 1) {
        if (flag == -1) {
          flag = num(p1[k], p2[i]);
          tep++;
        } else {
          if (flag != num(p1[k], p2[i])) {
            tep++;
          }
        }
      }
    }
    if (tep > 1) {
      printf("-1\n");
      return 0;
    } else if (tep == 1) {
      s.insert(flag);
    }
  }
  if (s.size() == 1)
    printf("%d", *s.begin());
  else
    printf("0");
}
