#include <bits/stdc++.h>
using namespace std;
struct node {
  long long cnt = 0, sum = 0;
  node operator+(const node& other) {
    node ret;
    ret.cnt = this->cnt + other.cnt;
    ret.sum = this->sum + other.sum;
    return ret;
  }
} tree[1 << 22];
set<long long> all;
map<long long, long long> mp;
map<long long, long long> id;
int n, q, a[100005];
vector<array<long long, 2> > qry;
void update(int node, int s, int e, int l, int r, int v) {
  if (r < s || e < l) return;
  if (l <= s && e <= r) {
    tree[node].cnt += v;
    tree[node].sum += (v * mp[s]);
    return;
  }
  int md = (s + e) >> 1;
  update(node << 1, s, md, l, r, v);
  update((node << 1) + 1, md + 1, e, l, r, v);
  tree[node] = tree[node << 1] + tree[(node << 1) + 1];
}
node zero;
node get(int node, int s, int e, int l, int r) {
  if (r < s || e < l || l > r) return zero;
  if (l <= s && e <= r) return tree[node];
  int md = (s + e) >> 1;
  return get(node << 1, s, md, l, r) + get((node << 1) + 1, md + 1, e, l, r);
}
int get_idx(double target) {
  target = ceil(target);
  auto it = all.lower_bound((long long)target);
  if (it == all.end()) return n - 1;
  return id[*it] - 1;
}
int main() {
  scanf("%d%d", &n, &q);
  for (int i = 0; i < n; i++) scanf("%d", a + i), all.insert(a[i]);
  long long t, p, x;
  while (q--) {
    scanf("%lld%lld", &t, &p);
    x = -1;
    if (t == 1) scanf("%lld", &x), all.insert(x);
    qry.push_back(array<long long, 2>{p, x});
  }
  int idx = 0;
  int oldn = n;
  n = all.size();
  for (auto v : all) {
    mp[idx] = v;
    id[v] = idx;
    idx++;
  }
  for (int i = 0; i < oldn; i++) {
    update(1, 0, n - 1, id[a[i]], id[a[i]], 1);
  }
  for (auto v : qry) {
    node ex = get(1, 0, n - 1, 0, n - 1);
    if (v[1] == -1) {
      double lo = 0, hi = 1e18;
      for (int i = 0; i < 100; i++) {
        double md = (lo + hi) / 2;
        int i2 = get_idx(md);
        node ex = get(1, 0, n - 1, 0, i2);
        bool chk = (((double)(ex.cnt * md) - ex.sum) >= 1.0 * v[0]);
        if (chk)
          hi = md;
        else
          lo = md;
      }
      printf("%4f\n", lo);
    } else {
      update(1, 0, n - 1, id[a[v[0] - 1]], id[a[v[0] - 1]], -1);
      a[v[0] - 1] = v[1];
      update(1, 0, n - 1, id[a[v[0] - 1]], id[a[v[0] - 1]], 1);
    }
  }
}
