#include <bits/stdc++.h>
using namespace std;
struct DisjSet {
  int u[2010];
  void init(int n) {
    for (int i = 0; i < n; i++) u[i] = i;
  }
  int find(int x) { return (u[x] == x) ? x : (u[x] = find(u[x])); }
  bool merge(int x, int y) {
    x = find(x);
    y = find(y);
    if (x == y) return false;
    u[x] = y;
    return true;
  }
} u;
struct abc {
  int x, y;
  void input() {
    int _x, _y;
    scanf("%d%d", &_x, &_y);
    x = _x - _y;
    y = _x + _y;
  }
} pa[2010], pb[2010];
int n, m;
int a0[2010], a1[2010];
int b0[2010], b1[2010];
int cnt[2010][2010];
vector<int> ea, eb, e;
bool pd(int t) {
  int i, j, k;
  for (i = 0; i < n; i++) {
    a0[i] = pa[i].x - t - t;
    a1[i] = pa[i].x + t + t;
  }
  for (i = 0; i < m; i++) {
    b0[i] = pb[i].y - t - t;
    b1[i] = pb[i].y + t + t;
  }
  u.init(n);
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++) {
      if (pa[i].y != pa[j].y) continue;
      if (a0[i] <= a1[j] && a0[j] <= a1[i]) {
        a0[u.find(i)] = min(a0[u.find(i)], a0[u.find(j)]);
        a1[u.find(i)] = max(a1[u.find(i)], a1[u.find(j)]);
        u.merge(j, i);
      }
    }
  }
  ea.clear();
  for (i = 0; i < n; i++)
    if (u.find(i) == i) ea.push_back(i);
  u.init(m);
  for (i = 0; i < m; i++) {
    for (j = i + 1; j < m; j++) {
      if (pb[i].x != pb[j].x) continue;
      if (b0[i] <= b1[j] && b0[j] <= b1[i]) {
        b0[u.find(i)] = min(b0[u.find(i)], b0[u.find(j)]);
        b1[u.find(i)] = max(b1[u.find(i)], b1[u.find(j)]);
        u.merge(j, i);
      }
    }
  }
  eb.clear();
  for (i = 0; i < m; i++)
    if (u.find(i) == i) eb.push_back(i);
  int an = ea.size(), bn = eb.size();
  for (i = 0; i < an; i++) {
    for (j = i + 1; j < an; j++) {
      cnt[i][j] = 0;
    }
  }
  int x, y;
  for (i = 0; i < bn; i++) {
    e.clear();
    y = eb[i];
    for (j = 0; j < an; j++) {
      x = ea[j];
      if (b0[y] <= pa[x].y && pa[x].y <= b1[y] && a0[x] <= pb[y].x &&
          pb[y].x <= a1[x]) {
        e.push_back(j);
      }
    }
    for (j = 0; j < (int)e.size(); j++) {
      for (k = j + 1; k < (int)e.size(); k++) {
        cnt[e[j]][e[k]]++;
        if (cnt[e[j]][e[k]] == 2) return true;
      }
    }
  }
  return false;
}
int main() {
  int i, l, r, z;
  scanf("%d%d", &n, &m);
  for (i = 0; i < n; i++) pa[i].input();
  for (i = 0; i < m; i++) pb[i].input();
  l = 0;
  r = 1000010;
  if (!pd(r))
    printf("Poor Sereja!\n");
  else {
    while (l + 1 < r) {
      z = (l + r) >> 1;
      if (pd(z))
        r = z;
      else
        l = z;
    }
    printf("%d\n", r);
  }
  return 0;
}
