#include <cstdio>
#include <vector>
using namespace std;
const int N = 100010;
struct Fenwick
{
private:
vector<int> fw;
public:
int lowbit(int n)
{
return n & (-n);
}
void init(int n)
{
fw.assign(n + 1, 0);
}
int sum(int n)
{
int s = 0;
while (n > 0) {
s += fw[n];
n -= lowbit(n);
}
return s;
}
int sum(int a, int b)
{
return sum(b) - (a == 1 ? 0 : sum(a - 1));
}
void adjust(int k, int v)
{
while (k < (int)fw.size()) {
fw[k] += v;
k += lowbit(k);
}
}
};
struct solution
{
private:
int x[N];
int n, k;
Fenwick neg, zero;
public:
bool input()
{
if (scanf("%d%d", &n, &k) != 2) return false;
neg.init(n);
zero.init(n);
for (int i = 1; i <= n; i++) {
scanf("%d", &x[i]);
if (x[i] < 0) neg.adjust(i, 1);
else if (x[i] == 0) zero.adjust(i, 1);
}
return true;
}
void solve()
{
for (int i = 0; i < k; i++) {
char ch;
scanf("%c", &ch);
while (ch != 'P' && ch != 'C') {
scanf("%c", &ch);
}
int a, b;
scanf("%d%d", &a, &b);
if (ch == 'P') {
if (zero.sum(a, b)) {
printf("0");
} else if (neg.sum(a, b) & 1) {
printf("-");
} else {
printf("+");
}
} else {
if (x[a] < 0 && b >= 0) {
neg.adjust(a, 1);
} else if (x[a] >= 0 && b < 0) {
neg.adjust(a, 1);
}
if (x[a] != 0 && b == 0) {
zero.adjust(a, 1);
} else if (x[a] == 0 && b != 0) {
zero.adjust(a, -1);
}
x[a] = b;
}
}
printf("\n");
}
};
int main()
{
#ifndef ONLINE_JUDGE
freopen("d:\\OJ\\uva_in.txt", "r", stdin);
#endif
solution solver;
while (solver.input()) {
solver.solve();
}
return 0;
}