#include <bits/stdc++.h>
using namespace std;
long long h[100010];
int type[100010];
long long p[100010], x[100010], v[100010];
long long ha[100010 * 3];
inline int lowbit(int x) { return x & -x; }
struct FenwickTree {
  int n;
  vector<long long> C;
  void resize(int n) {
    this->n = n;
    C.resize(n + 10);
  }
  void clear() { fill(C.begin(), C.end(), 0); }
  long long sum(int x) {
    long long ret = 0;
    while (x > 0) {
      ret += C[x];
      x -= lowbit(x);
    }
    return ret;
  }
  void add(int x, long long d) {
    while (x <= n) {
      C[x] += d;
      x += lowbit(x);
    }
  }
};
FenwickTree tot, cnt;
int main() {
  int n, q;
  cin >> n >> q;
  tot.resize(n + q + 10);
  tot.clear();
  cnt.resize(n + q + 10);
  cnt.clear();
  set<long long> st;
  map<long long, int> id;
  for (int i = 1; i <= n; i++) {
    scanf("%I64d", &h[i]);
    st.insert(h[i]);
  }
  for (int i = 1; i <= q; i++) {
    scanf("%d", &type[i]);
    if (type[i] == 1) {
      scanf("%I64d %I64d", &p[i], &x[i]);
      st.insert(x[i]);
    } else {
      scanf("%I64d", &v[i]);
    }
  }
  int idx = 0;
  for (set<long long>::iterator it = st.begin(); it != st.end(); it++) {
    ha[idx] = *it;
    id[*it] = ++idx;
  }
  for (int i = 1; i <= n; i++) {
    cnt.add(id[h[i]], 1);
    tot.add(id[h[i]], h[i]);
  }
  for (int i = 1; i <= q; i++) {
    if (type[i] == 1) {
      cnt.add(id[h[p[i]]], -1);
      tot.add(id[h[p[i]]], -h[p[i]]);
      h[p[i]] = x[i];
      cnt.add(id[h[p[i]]], 1);
      tot.add(id[h[p[i]]], h[p[i]]);
    } else {
      double L = 0, R = 1e17;
      while (L + 1e-7 < R) {
        double M = (L + R) / 2.;
        long long *p = upper_bound(ha, ha + idx, (long long)(M + 1e-14));
        int j = p - ha;
        if ((double)(tot.sum(j) + v[i]) / cnt.sum(j) > M)
          L = M;
        else
          R = M;
      }
      printf("%.5f\n", L);
    }
  }
  return 0;
}
