#include <bits/stdc++.h>
using namespace std;
class fenwick {
 public:
  long long int F[300000];
  fenwick() { memset(F, 0, sizeof F); }
  void update(int x, long long int val) {
    while (x <= 250000) {
      F[x] += val;
      x += x & -x;
    }
  }
  long long int query(int x) {
    long long int res = 0;
    while (x) {
      res += F[x];
      x -= x & -x;
    }
    return res;
  }
} A, S;
int n, m;
long long int arr[200000];
map<long long int, int> yer;
pair<long long int, pair<long long int, long long int> > q[200000];
int f(double x) {
  x -= 1e-8;
  x = ceil(x);
  return yer.lower_bound((long long int)x)->second;
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    scanf("%lld", arr + i);
    yer[arr[i]] = 1;
  }
  for (int i = 1; i <= m; i++) {
    scanf("%lld", &q[i].first);
    if (q[i].first == 1) {
      scanf("%lld %lld", &q[i].second.first, &q[i].second.second);
      yer[q[i].second.second] = 1;
    } else
      scanf("%lld", &q[i].second.first);
  }
  int ind = 0;
  for (typeof(yer.begin()) it = yer.begin(); it != yer.end(); it++)
    it->second = ++ind;
  yer[1e18] = ++ind;
  for (int i = 1; i <= n; i++)
    A.update(f(arr[i]), arr[i]), S.update(f(arr[i]), 1);
  for (int i = 1; i <= m; i++) {
    if (q[i].first == 1) {
      A.update(f(arr[q[i].second.first]), -arr[q[i].second.first]),
          S.update(f(arr[q[i].second.first]), -1);
      arr[q[i].second.first] = q[i].second.second;
      A.update(f(arr[q[i].second.first]), arr[q[i].second.first]),
          S.update(f(arr[q[i].second.first]), 1);
    } else {
      double bas = 0.0, son = 1e18, orta;
      for (int iteration = 1; iteration <= 200; iteration++) {
        orta = (bas + son) / 2;
        if (orta * S.query(f(orta) - 1) - A.query(f(orta) - 1) >=
            q[i].second.first)
          son = orta;
        else
          bas = orta;
      }
      printf("%.12lf\n", bas);
    }
  }
}
