#include <bits/stdc++.h>
using namespace std;
const long long LLINF = 1e18;
const int INF = 1e9;
const double EPS = 1e-7;
inline const int &INT() {
  static int x;
  scanf("%d", &x);
  return x;
}
inline const long long &LONG() {
  static long long x;
  scanf("%lld", &x);
  return x;
}
template <class T>
inline void MIN(T &a, const T &b) {
  if (b < a) a = b;
}
template <class T>
inline void MAX(T &a, const T &b) {
  if (b > a) a = b;
}
const int NN = 4e5 + 5;
int N, Q, R, init[NN];
long long sum[NN], cnt[NN];
long long A[NN], B[NN], C[NN];
vector<int> val;
int getpos(int x) {
  return lower_bound(val.begin(), val.end(), x) - val.begin() + 1;
}
void upd(long long *T, int u, int v) {
  for (; u < NN; u += u & -u) T[u] += v;
}
long long get(long long *T, int u) {
  long long ret = 0;
  for (; u > 0; u -= u & -u) ret += T[u];
  return ret;
}
void ins(int x) {
  int p = getpos(x);
  upd(sum, p, x);
  upd(cnt, p, 1);
}
void era(int x) {
  int p = getpos(x);
  upd(sum, p, -x);
  upd(cnt, p, -1);
}
long long cal(int mid) {
  return get(cnt, mid + 1) * val[mid] - get(sum, mid + 1);
}
int main() {
  N = INT();
  Q = INT();
  for (int i = (1); i <= (N); ++i) init[i] = INT();
  for (int i = (1); i <= (Q); ++i) {
    A[i] = INT();
    B[i] = LONG();
    if (A[i] == 1) C[i] = INT();
  }
  val.assign(init + 1, init + N + 1);
  for (int i = (1); i <= (Q); ++i) val.push_back(C[i]);
  sort(val.begin(), val.end());
  val.erase(unique(val.begin(), val.end()), val.end());
  for (int i = (1); i <= (N); ++i) ins(init[i]);
  for (int i = (1); i <= (Q); ++i) {
    if (A[i] == 1) {
      era(init[B[i]]);
      init[B[i]] = C[i];
      ins(init[B[i]]);
    } else {
      int low = 0, high = val.size() - 1;
      while (low < high) {
        int mid = (low + high + 1) / 2;
        long long S = cal(mid);
        if (S <= B[i])
          low = mid;
        else
          high = mid - 1;
      }
      double ans = 0;
      double x = B[i];
      x -= cal(low);
      ans = val[low] + x / get(cnt, low + 1);
      printf("%.9lf\n", ans);
    }
  }
  return 0;
}
