#include <bits/stdc++.h>
using namespace std;
const int MAXN = 212345, OFFSET = 3;
struct BITree {
  long long a[MAXN];
  void clear() { memset(a, 0, sizeof(a)); }
  int lowbit(int i) { return (i & -i); }
  long long sum(int i) {
    long long ret = 0;
    for (i += OFFSET; i > 0; i -= lowbit(i)) ret += a[i];
    return ret;
  }
  void add(int i, long long d) {
    for (i += OFFSET; i < MAXN; i += lowbit(i)) a[i] += d;
  }
} cnt, sum;
int h[MAXN];
vector<pair<int, long long> > qq;
vector<int> H;
int find(int h) { return lower_bound(H.begin(), H.end(), h) - H.begin(); }
int main() {
  int n, q;
  scanf("%d%d", &n, &q);
  for (int i = 0; i < int(n); i++) scanf("%d", h + i);
  qq.resize(q);
  H = vector<int>(h, h + n);
  for (int i = 0; i < int(q); i++) {
    int t;
    scanf("%d", &t);
    if (t == 1) {
      int p, x;
      scanf("%d%d", &p, &x);
      qq[i].first = p - 1;
      qq[i].second = x;
      H.push_back(x);
    } else {
      long long v;
      scanf("%I64d", &v);
      qq[i].first = -1;
      qq[i].second = v;
    }
  }
  sort(H.begin(), H.end());
  H.resize(unique(H.begin(), H.end()) - H.begin());
  cnt.clear();
  sum.clear();
  for (int i = 0; i < int(n); i++) {
    h[i] = find(h[i]);
    cnt.add(h[i], 1);
    sum.add(h[i], H[h[i]]);
  }
  for (int i = 0; i < int(q); i++) {
    if (~qq[i].first) {
      int j = qq[i].first;
      cnt.add(h[j], -1);
      sum.add(h[j], -H[h[j]]);
      h[j] = find(qq[i].second);
      cnt.add(h[j], 1);
      sum.add(h[j], H[h[j]]);
    } else {
      long long v = qq[i].second;
      int l = 0, r = H.size() - 1;
      while (l < r) {
        int m = (l + r + 1) / 2;
        int tot = cnt.sum(m);
        long long vol = sum.sum(m);
        if (H[m] * (long long)tot - vol < v)
          l = m;
        else
          r = m - 1;
      }
      int tot = cnt.sum(l);
      long long vol = sum.sum(l);
      printf("%.10f\n",
             H[l] + (v - (H[l] * (long long)tot - vol)) / (double)tot);
    }
  }
}
