#include <bits/stdc++.h>
using namespace std;
int n, q;
int a[100005];
long long tree[2 * 100005], tree2[2 * 100005];
vector<long long> mapa;
int mp(double val) {
  return upper_bound(mapa.begin(), mapa.end(), val) - mapa.begin();
}
void update(int pos, int val) {
  for (int i = pos; i < 2 * 100005; i += i & -i) tree[i] += val;
}
void update2(int pos, int val) {
  for (int i = pos; i < 2 * 100005; i += i & -i) tree2[i] += val;
}
void upd(int pos, int val) {
  int posi = mp(a[pos - 1]);
  update(posi, -a[pos - 1]);
  update2(posi, -1);
  a[pos - 1] = val;
  posi = mp(val);
  update(posi, val);
  update2(posi, 1);
}
long long query(int pos) {
  long long res = 0;
  for (int i = pos; i > 0; i -= i & -i) res += tree[i];
  return res;
}
long long query2(int pos) {
  long long res = 0;
  for (int i = pos; i > 0; i -= i & -i) res += tree2[i];
  return res;
}
long double f(long double x) {
  double res;
  int pos = mp(x);
  res = x * query2(pos) - query(pos);
  return res;
}
struct quer {
  int t, p;
  long long v;
  quer(){};
  quer(int t, int p, long long v) : t(t), p(p), v(v){};
} qry[100005];
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 0; i < n; i++) scanf("%d", a + i), mapa.push_back(a[i]);
  for (int i = 0, t, p = 0; i < q; i++) {
    long long v;
    cin >> t;
    if (t == 1)
      cin >> p >> v, mapa.push_back(v);
    else
      cin >> v;
    qry[i] = quer(t, p, v);
  }
  sort(mapa.begin(), mapa.end());
  mapa.resize(unique(mapa.begin(), mapa.end()) - mapa.begin());
  for (int i = 0; i < n; i++) {
    int posi = mp(a[i]);
    update(posi, a[i]);
    update2(posi, 1);
  }
  for (int i = 0; i < q; i++) {
    quer Q = qry[i];
    if (Q.t == 1) {
      upd(Q.p, Q.v);
    } else {
      double l = 0, r = 1000000001;
      while (l + 1e-5 <= r) {
        double m = l + (r - l) / 2;
        if (f(m) < Q.v)
          l = m + 1e-5;
        else
          r = m;
      }
      if (abs(l - 1000000001) <= 1e-5 && abs(f(l) - Q.v) > 1e-5) {
        l = 1.0 * (Q.v + query(2 * 100005 - 1)) / n;
      }
      printf("%.5lf\n", l);
    }
  }
  return 0;
}
