/* Goal to be a Master */
      #include <algorithm>
      #include <bits/stdc++.h>
      #include<string>
      using namespace std;
      #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
      #define vi vector<int>
      #define ll long long
      #define pb push_back
      #define mp make_pair
      #define all(x) x.begin(),x.end()
      
 const int maxN=1e5+1;
 pair<int,int> st[4*maxN];
 int a[maxN];
 void build(int si,int ss,int se)
 {
     if(ss==se)
     {
         st[si]=mp(a[ss],1);
         return ;
 
     } 
     else{
     int mid=(se+ss)/2;
     build(2*si+1,ss,mid);
     build(2*si+2,mid+1,se);
     st[si].first=min(st[2*si+2].first,st[2*si+1].first);
     if(st[2*si+2].first<st[2*si+1].first)
      st[si].second=st[2*si+2].second;
     else if(st[2*si+2].first>st[2*si+1].first)
      st[si].second=st[2*si+1].second;
     else
      st[si].second=st[2*si+1].second+st[2*si+2].second;
     
     
     }
 }
 void update(int si,int ss,int se,int idx,int data)
 {
     if(se<idx || ss>idx)
      return;
     if(se==ss)
     {
         
         
         if(ss==idx)
          st[si]=mp(data,1);
         else
          st[si]=mp(a[ss],1); 
         return;
     }
     else
     {
      int mid=(se+ss)/2;
      update(2*si+1,ss,mid,idx,data);
      update(2*si+2,mid+1,se,idx,data);
     st[si].first=min(st[2*si+2].first,st[2*si+1].first);
     if(st[2*si+2].first<st[2*si+1].first)
      st[si].second=st[2*si+2].second;
     else if(st[2*si+2].first>st[2*si+1].first)
      st[si].second=st[2*si+1].second;
     else
      st[si].second=st[2*si+1].second+st[2*si+2].second;
       
     }
 }
pair<int,int> query(int si,int ss,int se,int qs,int qe)
{
    if(qs>qe)
     return {INT_MAX,1};
    
    if(ss==qs && se==qe)
     return st[si];
    else
    {
        int mid=(ss+se)/2;
        pair<int,int> l=query(2*si+1,ss,mid,qs,min(mid,qe));
        pair<int,int> r=query(2*si+2,mid+1,se,max(mid+1,qs),qe);
        st[si].first=min(l.first,r.first);
     if(l.first<r.first)
      st[si].second=l.second;
     else if(l.first>r.first)
      st[si].second=r.second;
     else
      st[si].second=l.second+r.second;
     return st[si];
    }
     
}
      int main()
      {
        IOS  
        int n,m;
        cin>>n>>m;
        
        for(int i=0;i<n;i++)
         cin>>a[i];
        build(0,0,n-1); 
        while(m--)
        {
            int x;
            cin>>x;
            if(x==1)
            {
                int j,k;
                cin>>j>>k;
                update(0,0,n-1,j,k);
            }
            else
            {
                int j,k;
                cin>>j>>k;
                pair<int,int> h=query(0,0,n-1,j,k-1);
                cout<<h.first<<" "<<h.second<<"\n";
            }
        } 
        return 0;
      }