#include <bits/stdc++.h>
using namespace std;
const int N = 200010;
const double arefa = 0.8;
int n, q, a[N];
int len, root, size[N], son[N][2], s[N], tot;
short num[N];
long long sum[N], dt[N];
bool b;
void read(int &a) {
  char ch;
  while (!((ch = getchar()) >= '0' && ch <= '9'))
    ;
  a = ch - '0';
  while ((ch = getchar()) >= '0' && ch <= '9') (a *= 10) += ch - '0';
}
void dfs(int i) {
  if (son[i][0]) dfs(son[i][0]);
  s[++tot] = i;
  if (son[i][1]) dfs(son[i][1]);
}
int rebuild(int l, int r) {
  if (l > r) return 0;
  int mid = (l + r) >> 1, i = s[mid];
  son[i][0] = rebuild(l, mid - 1);
  son[i][1] = rebuild(mid + 1, r);
  size[i] = size[son[i][0]] + size[son[i][1]] + num[i];
  sum[i] = sum[son[i][0]] + sum[son[i][1]] + dt[i] * num[i];
  return i;
}
void ins(int &i, int x, int dep) {
  if (!i) {
    i = ++len;
    sum[i] = dt[i] = x;
    size[i] = num[i] = 1;
    if (dep > (log(n) / log(1.25))) b = 1;
    return;
  }
  size[i]++;
  sum[i] += x;
  if (x <= dt[i])
    ins(son[i][0], x, dep + 1);
  else
    ins(son[i][1], x, dep + 1);
  if (!b) return;
  if (size[son[i][0]] <= 0.8 * size[i] && size[son[i][1]] <= 0.8 * size[i])
    return;
  tot = 0;
  dfs(i);
  i = rebuild(1, tot);
  b = 0;
}
void del(int i, int x) {
  size[i]--;
  sum[i] -= x;
  if (dt[i] == x) {
    num[i]--;
    return;
  }
  if (x < dt[i])
    del(son[i][0], x);
  else
    del(son[i][1], x);
}
double getans(long long v) {
  int i = root;
  long long cursum = 0, cursize = 0, tmpsum, tmpsize;
  while (i) {
    tmpsum = sum[son[i][0]] + dt[i] * num[i] + cursum;
    tmpsize = cursize + size[son[i][0]] + num[i];
    if (v >= (long long)dt[i] * (long long)tmpsize - tmpsum) {
      cursum = tmpsum;
      cursize = tmpsize;
      i = son[i][1];
    } else
      i = son[i][0];
  }
  return (v + cursum + 0.0) / cursize;
}
int main() {
  int i, k, x, y;
  long long v;
  scanf("%d%d", &n, &q);
  for (i = 1; i <= n; i++) scanf("%d", &a[i]), ins(root, a[i], 0);
  for (i = 1; i <= q; i++) {
    read(k);
    if (k == 1) {
      read(x);
      read(y);
      del(root, a[x]);
      ins(root, a[x] = y, 0);
    } else {
      scanf("%I64d", &v);
      printf("%.10lf\n", getans(v));
    }
  }
  return 0;
}
