#include using namespace std; using ll = long long; template< typename T > struct segtree{ using F = function; int n; F f; T e; vector data; /* * n:鬆らせ謨ー * f:貍皮ョ・ * e:蜊倅ス榊・ */ segtree(int n,F f,T e):f(f),e(e){ this->n = 1; while(this->nn)<<=1; data.assign(2*(this->n),e); } void set(vector &a){ for(int i = 0;i=0;i--){ data[i] = f(data[2*i+1],data[2*i+2]); } } void update(int i,T x){ int ni = i + n - 1; data[ni] = x; while(ni>0){ ni = (ni-1)/2; data[ni] = f(data[2*ni+1],data[2*ni+2]); } } T query(int a,int b){ T ans = e; a += n-1; b--;b += n-1; while(a>=0&&b>=0&&a<=b){ if(a==b){ ans = f(ans,data[a]); break; } if(!(a&1))ans = f(ans,data[a]); if(b&1)ans = f(ans,data[b]); a++;b--; a = (a-1)/2;b = (b-1)/2; } return ans; } T operator[](const int i) const { return data[i+n-1]; } }; int cmp(int a,int b){return a*b;} int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int n,q; cin>>n>>q; segtree seg(n,cmp,1); vector a(n); for(int i = 0;i>a[i]; for(int i = 0;i>op; if(op==1){ int x,y; cin>>x>>y; x--; a[x] = y; seg.update(x,(a[x]%2?-1:1)); }else{ int l,r; cin>>l>>r; l--;r--; int now = 1; now *= seg.query(l+1,r+1); if(now==1){ cout<<"F"<