#include <bits/stdc++.h>
using namespace std;
pair<int, int> trans(pair<int, int> p) {
  return pair<int, int>(p.first + p.second, -p.first + p.second);
}
void ordena(map<int, vector<int> > &mapa) {
  for (map<int, vector<int> >::iterator it = mapa.begin(); it != mapa.end();
       it++)
    sort(it->second.begin(), it->second.end());
}
struct segmento {
  int x1, y1, x2, y2;
  segmento() {}
  segmento(int inx1, int iny1, int inx2, int iny2) {
    x1 = inx1;
    y1 = iny1;
    x2 = inx2;
    y2 = iny2;
  }
};
void extraer(map<int, vector<int> > &v, vector<segmento> &w, int t) {
  for (map<int, vector<int> >::iterator it = v.begin(); it != v.end(); it++) {
    int y = it->first;
    vector<int> &aux = it->second;
    int xini = aux[0];
    int xfin = aux[0];
    for (int i = 1; i < int(aux.size()); i++) {
      int x = aux[i];
      if (xfin + t < x - t) {
        w.push_back(segmento(xini - t, y, xfin + t, y));
        xini = xfin = x;
      } else {
        xfin = x;
      }
    }
    w.push_back(segmento(xini - t, y, xfin + t, y));
  }
}
bool interseccion(segmento &s1, segmento &s2) {
  if (s1.x1 == s1.x2) return interseccion(s2, s1);
  return s1.x1 <= s2.x1 and s2.x1 <= s1.x2 and s2.y1 <= s1.y1 and
         s1.y1 <= s2.y2;
}
int visto[3000][3000];
int n, m;
pair<int, int> ver[3000000], hor[3000000];
map<int, vector<int> > ver2hor, hor2ver;
bool puede(int t) {
  vector<segmento> shor, sver;
  extraer(ver2hor, shor, t);
  extraer(hor2ver, sver, t);
  for (int i = 0; i < int(sver.size()); i++) {
    segmento &s = sver[i];
    swap(s.x1, s.y1);
    swap(s.x2, s.y2);
  }
  for (int i = 0; i < int(sver.size()); i++)
    for (int j = 0; j < int(sver.size()); j++) visto[i][j] = 0;
  for (int i = 0; i < int(shor.size()); i++) {
    vector<int> lista;
    for (int j = 0; j < int(sver.size()); j++)
      if (interseccion(shor[i], sver[j])) lista.push_back(j);
    for (int j1 = 0; j1 < int(lista.size()); j1++) {
      for (int j2 = j1 + 1; j2 < int(lista.size()); j2++) {
        int i1 = lista[j1];
        int i2 = lista[j2];
        if (visto[i1][i2]) return true;
        visto[i1][i2] = 1;
      }
    }
  }
  return false;
}
void escribe(map<int, vector<int> > &mapa) {
  for (map<int, vector<int> >::iterator it = mapa.begin(); it != mapa.end();
       it++) {
    cout << it->first << ":";
    vector<int> &aux = it->second;
    for (int i = 0; i < int(aux.size()); i++) cout << aux[i] << ",";
    cout << endl;
  }
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++) {
    cin >> ver[i].first >> ver[i].second;
    ver[i] = trans(ver[i]);
    hor2ver[ver[i].first].push_back(ver[i].second);
  }
  for (int i = 0; i < m; i++) {
    cin >> hor[i].first >> hor[i].second;
    hor[i] = trans(hor[i]);
    ver2hor[hor[i].second].push_back(hor[i].first);
  }
  ordena(ver2hor);
  ordena(hor2ver);
  int inf = 0;
  int sup = 10000000;
  while (inf + 1 < sup) {
    int med = (inf + sup) / 2;
    if (puede(med))
      sup = med;
    else
      inf = med;
  }
  if (sup == 10000000) {
    cout << "Poor Sereja!" << endl;
  } else {
    if (sup % 2) sup++;
    sup /= 2;
    cout << sup << endl;
  }
}
