1. #include <cstdio>
    2. #include <algorithm>
    3. #include <iostream>
    4. #include <cstring>
    5. #include <cstdlib>
    6. #include <cmath>
    7. using namespace std;
    8. inline int gi(){
    9. char tmp=getchar();int ans=0;
    10. while(!isdigit(tmp))tmp=getchar();
    11. while(isdigit(tmp)){
    12. ans = ans * 10 + tmp - '0';
    13. tmp = getchar();
    14. }
    15. return ans;
    16. }
    17. const int N = 2002000;
    18. #define ll unsigned long long
    19. struct Node{
    20. int minn,maxx;ll sum;
    21. Node(int minn=0,int maxx=0,ll sum=0):
    22. minn(minn),maxx(maxx),sum(sum) {}
    23. Node operator + (const Node &x){
    24. Node ans;
    25. ans.minn = min(minn,x.minn);
    26. ans.maxx = max(maxx,x.maxx);
    27. ans.sum = sum + x.sum;
    28. return ans;
    29. }
    30. }Seg[N];
    31. #define ls (pos<<1)
    32. #define rs (ls|1)
    33. #define mid ((l+r)>>1)
    34. #define lson ls,l,mid
    35. #define rson rs,mid+1,r
    36. void Update(int pos,int l,int r,int x,int v){
    37. if(l==r){
    38. Seg[pos] = Node(v,v,1ll*v*v*v);
    39. return ;
    40. }
    41. if(x <= mid)
    42. Update(lson,x,v);
    43. if(x > mid)
    44. Update(rson,x,v);
    45. Seg[pos] = Seg[ls] + Seg[rs];
    46. }
    47. Node Query(int pos,int l,int r,int ql,int qr){
    48. if(ql <= l && r <= qr) return Seg[pos];
    49. if(qr <= mid) return Query(lson,ql,qr);
    50. else if(ql > mid) return Query(rson,ql,qr);
    51. else if(ql<=mid && qr>mid){
    52. Node x = Query(lson,ql,qr);Node y = Query(rson,ql,qr);
    53. return x+y;
    54. }
    55. }
    56. int A[N];
    57. void Build(int pos,int l,int r){
    58. if(l == r){
    59. Seg[pos] = Node(A[l],A[l],1ll*A[l]*A[l]*A[l]);
    60. return;
    61. }
    62. Build(lson),Build(rson);
    63. Seg[pos] = Seg[ls] + Seg[rs];
    64. }
    65. inline ll Calc(int x,int y){
    66. x--;
    67. return (long long)((1ll*y*y*(y+1)*(y+1) - 1ll*x*x*(x+1)*(x+1)));
    68. }
    69. signed main()
    70. {
    71. #ifdef DMYTXDY
    72. freopen("data.in","r",stdin);
    73. #endif
    74. int n,m;n=gi(),m=gi();
    75. for(int i=1;i<=n;++i)
    76. A[i]=gi();
    77. Build(1,1,n);
    78. for(int i=1;i<=m;++i){
    79. int opt,x;opt=gi(),x=gi();
    80. int y=gi();
    81. if(opt==1){
    82. Update(1,1,n,x,y);
    83. }
    84. if(opt==2){
    85. Node res = Query(1,1,n,x,y);
    86. // n * (n+1) * (2n+1) / 6
    87. if(Calc(res.minn,res.maxx) == res.sum*4)
    88. puts("damushen");
    89. else
    90. puts("yuanxing");
    91. }
    92. }
    93. return 0;
    94. }