#include <bits/stdc++.h>
using namespace std;
const long double PI = acosl(-1.0);
const double EPS = 1e-12;
void combination(long long com[][1005]) {
  com[0][0] = 1;
  int sz = 1000;
  for (int i = 1; i <= sz; i++) {
    com[i][0] = 1;
    for (int j = 1; j <= i; j++) {
      com[i][j] = com[i - 1][j] + com[i - 1][j - 1];
      com[i][j] = com[i][j] % 1000000007;
    }
  }
}
int find_par(int cn) {}
int gcd(int u, int v) {
  if (v == 0) return u;
  return gcd(v, u % v);
}
void insert_ind(int cs, int ci, int s, int e) {
  if (s == e) {
    return;
  }
  int mid = (s + e) / 2;
  if (ci <= mid)
    insert_ind(2 * cs, ci, s, mid);
  else
    insert_ind(2 * cs + 1, ci, mid + 1, e);
}
void update_ind(int cs, int ci, int s, int e, int val) {
  if (s == e) {
    return;
  }
  int mid = (s + e) / 2;
  if (ci <= mid)
    update_ind(2 * cs, ci, s, mid, val);
  else
    update_ind(2 * cs + 1, ci, mid + 1, e, val);
}
void update_seg(int cs, int ds, int de, int s, int e, int val) {
  if (ds == s && de == e) {
    return;
  }
  int mid = (s + e) / 2;
  if (ds <= mid) update_seg(2 * cs, ds, min(mid, de), s, mid, val);
  if (de > mid) update_seg(2 * cs + 1, max(mid + 1, ds), de, mid + 1, e, val);
}
void pattern_match(char pat[], const int len, int pi[]) {
  pi[1] = 0;
  for (int i = 2; i <= len; i++) {
    int st = i - 1;
    while (st >= 0 && pat[pi[st] + 1] != pat[i]) st = pi[st];
    if (st == 0)
      pi[i] = 0;
    else
      pi[i] = pi[st] + 1;
  }
}
void pattern_match(char pat[], int pi[], char tar[], const int len1, int gi[]) {
  if (pat[0] == tar[0]) gi[0] = 1;
  for (int i = 1; i < len1; i++) {
    int st = gi[i - 1];
    while (pat[st] != tar[i]) {
      if (st == 0) {
        st = -1;
        break;
      }
      st = pi[st - 1];
    }
    if (st == -1)
      gi[i] = 0;
    else
      gi[i] = st + 1;
  }
}
struct myArray {
  int mat[10][10];
};
myArray matrix_mul(myArray mat1, myArray mat2, const int sz) {
  int tmp[sz][sz];
  memset((tmp), 0, sizeof((tmp)));
  for (int r = 0; r < sz; r++)
    for (int c = 0; c < sz; c++)
      for (int cr = 0; cr < sz; cr++)
        tmp[r][c] += mat1.mat[r][cr] * mat2.mat[c][cr];
  myArray res;
  for (int r = 0; r < sz; r++)
    for (int c = 0; c < sz; c++) res.mat[r][c] = tmp[r][c];
  return res;
}
myArray unit_matrix(const int sz) {
  myArray ma;
  memset((ma.mat), 0, sizeof((ma.mat)));
  for (int i = 0; i < sz; i++) ma.mat[i][i] = 1;
  return ma;
}
myArray matrix_expo(int p, myArray mat, const int sz) {
  if (p == 0) {
    return unit_matrix(sz);
  }
  if (p & 1) return matrix_mul(mat, matrix_expo(p - 1, mat, sz), sz);
  myArray tmp = matrix_expo(p >> 1, mat, sz);
  return matrix_mul(tmp, tmp, sz);
}
int X[] = {0, 0, 1, -1};
int Y[] = {1, -1, 0, 0};
int n, m;
vector<pair<int, int> > first, sec;
bool couple[2005][2005];
bool can(int t) {
  vector<pair<int, pair<int, int> > > f, s, ff, ss;
  for (int i = 0; i < first.size(); i++) {
    int x = first[i].first, y = first[i].second;
    f.push_back(make_pair(x + y, make_pair(x - y - 2 * t, x - y + 2 * t)));
  }
  for (int i = 0; i < sec.size(); i++) {
    int x = sec[i].first;
    int y = sec[i].second;
    s.push_back(make_pair(x - y, make_pair(x + y - 2 * t, x + y + 2 * t)));
  }
  sort(s.begin(), s.end());
  sort(f.begin(), f.end());
  for (int i = 0; i < f.size(); i++) {
    int m = f[i].first;
    int l = f[i].second.first;
    int h = f[i].second.second;
    int j = i + 1;
    while (j < f.size() && f[i].first == f[j].first) {
      if (h >= f[j].second.first) {
        h = f[j].second.second;
      } else {
        ff.push_back(make_pair(m, make_pair(l, h)));
        m = f[j].first;
        l = f[j].second.first;
        h = f[j].second.second;
      }
      j++;
    }
    ff.push_back(make_pair(m, make_pair(l, h)));
    i = j - 1;
  }
  for (int i = 0; i < s.size(); i++) {
    int j = i + 1;
    int m = s[i].first;
    int l = s[i].second.first;
    int h = s[i].second.second;
    while (j < s.size() && s[i].first == s[j].first) {
      if (h >= s[j].second.first)
        h = s[j].second.second;
      else {
        ss.push_back(make_pair(m, make_pair(l, h)));
        m = s[j].first;
        l = s[j].second.first;
        h = s[j].second.second;
      }
      j++;
    }
    ss.push_back(make_pair(m, make_pair(l, h)));
    i = j - 1;
  }
  memset((couple), false, sizeof((couple)));
  for (int i = 0; i < ss.size(); i++) {
    vector<int> v;
    for (int j = 0; j < ff.size(); j++) {
      if (ss[i].first >= ff[j].second.first &&
          ss[i].first <= ff[j].second.second)
        if (ff[j].first >= ss[i].second.first &&
            ff[j].first <= ss[i].second.second) {
          for (int k = 0; k < v.size(); k++) {
            if (couple[j][v[k]]) return true;
            couple[j][v[k]] = couple[v[k]][j] = true;
          }
          v.push_back(j);
        }
    }
  }
  return false;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    int u, v;
    cin >> u >> v;
    first.push_back(make_pair(u, v));
  }
  for (int i = 0; i < m; i++) {
    int u, v;
    cin >> u >> v;
    sec.push_back(make_pair(u, v));
  }
  int l = 0, h = (1 << 20);
  int ans = -1;
  while (l <= h) {
    int m = (l + h) / 2;
    if (can(m)) {
      ans = m;
      h = m - 1;
    } else
      l = m + 1;
  }
  if (ans == -1)
    cout << "Poor Sereja!\n";
  else
    cout << ans << endl;
  return 0;
}
