#include #include #include #include #include #include using namespace std; using namespace atcoder; using ll = long long; using mint = modint998244353; using vi = vector; using vvi = vector; using vvvi = vector; using vll = vector; using vvll = vector; using vvvll = vector; using vmi = vector; using vvmi = vector; using vvvmi = vector; #define all(a) (a).begin(), (a).end() #define rep2(i, m, n) for (int i = (m); i < (n); ++i) #define rep(i, n) rep2(i, 0, n) #define drep2(i, m, n) for (int i = (m)-1; i >= (n); --i) #define drep(i, n) drep2(i, n, 0) void solve(){ } int op(int a, int b){ return max(a, b); } int e(){return 0;} int main(){ int n, q; cin >> n >> q; vi a(n); rep(i, n)cin >> a[i]; segtree seg(a); rep(i, q){ int c, x; cin >> c >> x; if(seg.all_prod() <= x){ cout << -1 << endl; continue; } if(c == 1){ if(seg.get(0) > x){ cout << 1 << endl; seg.set(0, 0); continue; } int l = 1, r = n; int mid; while(r - l > 1){ mid = (r+l)/2; if(seg.prod(0, mid) <= x){ l = mid; }else{ r = mid; } } cout << l+1 << endl; seg.set(l, 0); }else{ if(seg.get(n-1) > x){ cout << n << endl; seg.set(n-1, 0); continue; } int l = 0, r = n-1; int mid; while(r - l > 1){ mid =(l+r)/2; if(seg.prod(mid, n) <= x){ r = mid; }else{ l = mid; } } cout << l+1 << endl; seg.set(l, 0); } } return 0; }