#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;}