#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
inline int gi(){
char tmp=getchar();int ans=0;
while(!isdigit(tmp))tmp=getchar();
while(isdigit(tmp)){
ans = ans * 10 + tmp - '0';
tmp = getchar();
}
return ans;
}
const int N = 2002000;
#define ll unsigned long long
struct Node{
int minn,maxx;ll sum;
Node(int minn=0,int maxx=0,ll sum=0):
minn(minn),maxx(maxx),sum(sum) {}
Node operator + (const Node &x){
Node ans;
ans.minn = min(minn,x.minn);
ans.maxx = max(maxx,x.maxx);
ans.sum = sum + x.sum;
return ans;
}
}Seg[N];
#define ls (pos<<1)
#define rs (ls|1)
#define mid ((l+r)>>1)
#define lson ls,l,mid
#define rson rs,mid+1,r
void Update(int pos,int l,int r,int x,int v){
if(l==r){
Seg[pos] = Node(v,v,1ll*v*v*v);
return ;
}
if(x <= mid)
Update(lson,x,v);
if(x > mid)
Update(rson,x,v);
Seg[pos] = Seg[ls] + Seg[rs];
}
Node Query(int pos,int l,int r,int ql,int qr){
if(ql <= l && r <= qr) return Seg[pos];
if(qr <= mid) return Query(lson,ql,qr);
else if(ql > mid) return Query(rson,ql,qr);
else if(ql<=mid && qr>mid){
Node x = Query(lson,ql,qr);Node y = Query(rson,ql,qr);
return x+y;
}
}
int A[N];
void Build(int pos,int l,int r){
if(l == r){
Seg[pos] = Node(A[l],A[l],1ll*A[l]*A[l]*A[l]);
return;
}
Build(lson),Build(rson);
Seg[pos] = Seg[ls] + Seg[rs];
}
inline ll Calc(int x,int y){
x--;
return (long long)((1ll*y*y*(y+1)*(y+1) - 1ll*x*x*(x+1)*(x+1)));
}
signed main()
{
#ifdef DMYTXDY
freopen("data.in","r",stdin);
#endif
int n,m;n=gi(),m=gi();
for(int i=1;i<=n;++i)
A[i]=gi();
Build(1,1,n);
for(int i=1;i<=m;++i){
int opt,x;opt=gi(),x=gi();
int y=gi();
if(opt==1){
Update(1,1,n,x,y);
}
if(opt==2){
Node res = Query(1,1,n,x,y);
// n * (n+1) * (2n+1) / 6
if(Calc(res.minn,res.maxx) == res.sum*4)
puts("damushen");
else
puts("yuanxing");
}
}
return 0;
}