#include <bits/stdc++.h>
#pragma GCC optimize("O500")
#pragma comment(linker, "/STACK:1677777216")
#pragma warning(default : 4)
using namespace std;
const double eps = 1e-12;
const int oo = 0x3F3F3F3F;
const long long ooLL = 0x3F3F3F3F3F3F3F3FLL;
const int MOD = 1000000007;
template <typename T>
T sqr(T x) {
  return x * x;
}
template <typename T>
void debpr(const T &);
template <typename T1, typename T2>
void debpr(const pair<T1, T2> &);
template <typename T1, typename T2>
void debpr(const vector<T1, T2> &);
template <typename T>
void debpr(const set<T> &);
template <typename T1, typename T2>
void debpr(const map<T1, T2> &);
template <typename T>
void prcont(T be, T en, const string &st, const string &fi, const string &mi) {
  debpr(st);
  bool ft = 0;
  while (be != en) {
    if (ft) debpr(mi);
    ft = 1;
    debpr(*be);
    ++be;
  }
  debpr(fi);
}
template <typename T>
void debpr(const T &a) {
  cerr << a;
}
template <typename T1, typename T2>
void debpr(const pair<T1, T2> &p) {
  debpr("(");
  debpr(p.first);
  debpr(", ");
  debpr(p.second);
  debpr(")");
}
template <typename T1, typename T2>
void debpr(const vector<T1, T2> &a) {
  prcont(a.begin(), a.end(), "[", "]", ", ");
}
template <typename T>
void debpr(const set<T> &a) {
  prcont(a.begin(), a.end(), "{", "}", ", ");
}
template <typename T1, typename T2>
void debpr(const map<T1, T2> &a) {
  prcont(a.begin(), a.end(), "{", "}", ", ");
}
void deb(){};
template <typename T1>
void deb(const T1 &t1) {
  debpr(t1);
  debpr('\n');
}
template <typename T1, typename T2>
void deb(const T1 &t1, const T2 &t2) {
  debpr(t1);
  debpr(' ');
  debpr(t2);
  debpr('\n');
}
template <typename T1, typename T2, typename T3>
void deb(const T1 &t1, const T2 &t2, const T3 &t3) {
  debpr(t1);
  debpr(' ');
  debpr(t2);
  debpr(' ');
  debpr(t3);
  debpr('\n');
}
template <typename T1, typename T2, typename T3, typename T4>
void deb(const T1 &t1, const T2 &t2, const T3 &t3, const T4 &t4) {
  debpr(t1);
  debpr(' ');
  debpr(t2);
  debpr(' ');
  debpr(t3);
  debpr(' ');
  debpr(t4);
  debpr('\n');
}
const double PI = acos(-1.);
long long Round(double x) { return x < 0 ? x - .5 : x + .5; }
const int MX = 1 << 20;
int n, m, a[MX], w[MX], s, v, t[MX];
int gt(int p) {
  int r = -p - 1;
  for (; p >= 0; p = (p & (p + 1)) - 1) r += t[p];
  return -r;
}
void st(int p) {
  for (; p < MX; p = p | (p + 1)) ++t[p];
}
int main() {
  scanf("%d %d\n", &m, &n);
  for (int i = (0), _b(n); i < _b; ++i) scanf("%d", &a[i]);
  for (int i = (0), _b(m); i < _b; ++i) {
    scanf("%d", &v);
    if (v == -1) {
      int c = -1, p = 0;
      while (p < n) {
        int l = c, r = s;
        while (l + 1 < r) {
          int m = (l + r) / 2;
          if (gt(m) >= a[p] - p)
            r = m;
          else
            l = m;
        }
        if (r == s) break;
        w[r] = -1;
        st(r);
        c = r;
        ++p;
      }
    } else
      w[s++] = v;
  }
  string x;
  for (int i = (0), _b(s); i < _b; ++i)
    if (w[i] != -1) x.push_back(w[i] + '0');
  if (x == "") x = "Poor stack!";
  puts(x.c_str());
  return 0;
}
