#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
const int MOD = 1e9 + 7;
class FenwickTree {
 private:
  long long t[maxn];

 public:
  void update(int x, long long delta) {
    for (; x < maxn; x += x & -x) t[x] += delta;
  }
  long long get(int x) {
    long long res = 0;
    for (; x > 0; x -= x & -x) res += t[x];
    return res;
  }
  long long getSum(int l, int r) { return get(r) - get(l - 1); }
  long long getModSum(int l, int r) {
    return (get(r) - get(l - 1) + MOD) % MOD;
  }
} bit[2];
int n, q;
int a[maxn], w[maxn];
long long add(long long x, long long y) {
  x += y;
  if (x >= MOD) x -= MOD;
  if (x < 0) x += MOD;
  return x;
}
long long mul(long long x, long long y) { return x * y % MOD; }
int findIndex(int x, int y) {
  long long sum = bit[0].getSum(x, y);
  int lo = x, hi = y, id = y;
  while (hi - lo > 1) {
    int m = (lo + hi) >> 1;
    if (2 * bit[0].getSum(x, m) >= sum) {
      hi = m - 1;
      id = m;
    } else {
      lo = m + 1;
    }
  }
  return id;
}
long long getCost(int x, int y, int k) {
  long long left =
      add(mul(a[k], bit[0].getModSum(x, k)), -bit[1].getModSum(x, k));
  long long right =
      add(bit[1].getModSum(k + 1, y), -mul(a[k], bit[0].getModSum(k + 1, y)));
  return add(left, right);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cin >> n >> q;
  for (int i = 1; i <= n; ++i) cin >> a[i];
  for (int i = 1; i <= n; ++i) cin >> w[i];
  for (int i = 1; i <= n; ++i) {
    a[i] -= i;
    bit[0].update(i, w[i]);
    bit[1].update(i, mul(w[i], a[i]));
  }
  while (q--) {
    int x, y;
    cin >> x >> y;
    if (x < 0) {
      x = -x;
      bit[0].update(x, -w[x]);
      bit[1].update(x, -mul(w[x], a[x]));
      w[x] = y;
      bit[0].update(x, w[x]);
      bit[1].update(x, mul(w[x], a[x]));
    } else {
      int k = findIndex(x, y);
      cout << getCost(x, y, k) << "\n";
    }
  }
  return 0;
}
