#include <iostream>
#include <stdlib.h>
#include <string>
#include <vector>
#include <stdio.h>
#include <string.h>
using namespace std;
typedef struct HeapStruct *MinHeap;
typedef int ElementType;
struct HeapStruct
{
ElementType *ele;
int size; //当前元素个数
int capacity; //最大容量
};
MinHeap createHeap(int MaxSize)
{
MinHeap heap = (MinHeap)malloc(sizeof(struct HeapStruct));
heap->ele = (ElementType*)malloc((MaxSize+2)*sizeof(ElementType)); //sometimes +1 is not stable
heap->size = 0;
heap->capacity = MaxSize;
heap->ele[0] = -100000; //sentinel, a number less than all elements
return heap;
}
bool IsFull(MinHeap heap)
{
if(heap->size==heap->capacity)
return true;
else
return false;
}
void Insert(MinHeap heap, ElementType item)
{
int i;
if(IsFull(heap)) //if heap is full, insert is failed
{
cout << "the heap is full";
return;
}
i = ++heap->size;
for(; heap->ele[i/2] > item; i/=2)
heap->ele[i] = heap->ele[i/2];
heap->ele[i] = item;
}
int main()
{
int n, m;
cin >> n >> m;
MinHeap heap = createHeap(n);
int temp;
for(int i=1; i<=n; i++)
{
cin >> temp;
Insert(heap, temp);
}
char str[40];
int temp1, temp2, a, b;
for(int i=0; i<m; i++)
{
cin >> temp1 >> str;
if(strcmp(str, "and")==0)
{
cin >> temp2 >> str >> str;
a = -1, b = -1;
for(int i=1; i<=heap->size; i++)
{
if(heap->ele[i]==temp1)
a = i;
if(heap->ele[i]==temp2)
b = i;
}
if(a>b)
swap(a, b);
if(a%2==0&&b-a==1)
cout << "T" << endl;
else
cout << "F" << endl;
}
else
{
cin >> str;
if(strcmp(str, "a")==0)
{
cin >> str >> str >> temp2;
a = -1, b = -1;
for(int i=1; i<=heap->size; i++)
{
if(heap->ele[i]==temp1)
a = i;
if(heap->ele[i]==temp2)
b = i;
}
if(b==a/2)
cout << "T" << endl;
else
cout << "F" << endl;
}
else
{
cin >> str;
if(strcmp(str, "root")==0)
{
if(temp1==heap->ele[1])
cout << "T" << endl;
else
cout << "F\n";
}
else
{
cin >> str >> temp2;
a = -1, b = -1;
for(int i=1; i<=heap->size; i++)
{
if(heap->ele[i]==temp1)
a = i;
if(heap->ele[i]==temp2)
b = i;
}
if(a == b/2)
cout << "T\n";
else
cout << "F\n";
}
}
}
}
return 0;
}