#include <bits/stdc++.h>
using namespace std;
const int MAXN = 200005;
const int MOD = 1000000007;
int N, Q;
long long A[MAXN];
long long W[MAXN];
long long BIT[3][MAXN];
long long get(int t, int idx) {
  long long ret = 0;
  for (; idx > 0; idx -= idx & -idx) {
    ret += BIT[t][idx];
    if (t != 0) ret %= MOD;
  }
  return ret;
}
void add(int t, int idx, long long val) {
  for (; idx < MAXN; idx += idx & -idx) {
    BIT[t][idx] += val;
    if (t != 0) BIT[t][idx] %= MOD;
  }
}
int get_median(int left, int right) {
  long long pre_left = get(0, left - 1);
  long long pre_right = get(0, right);
  long long sum = pre_right - pre_left;
  int lo = left, hi = right;
  while (lo < hi) {
    int mid = lo + (hi - lo) / 2;
    if (2 * (get(0, mid) - pre_left) >= sum)
      hi = mid;
    else
      lo = mid + 1;
  }
  return lo;
}
int main() {
  ios::sync_with_stdio(0);
  cin >> N >> Q;
  for (int i = 1; i <= N; i++) cin >> A[i];
  for (int i = 1; i <= N; i++) {
    cin >> W[i];
    add(0, i, W[i]);
    add(1, i, W[i] * i % MOD);
    add(2, i, A[i] * W[i] % MOD);
  }
  for (int i = 0, x, y; i < Q; i++) {
    cin >> x >> y;
    if (x < 0) {
      x *= -1;
      add(0, x, y - W[x]);
      add(1, x, x * (y - W[x]) % MOD);
      add(2, x, A[x] * (y - W[x]) % MOD);
      W[x] = y;
    } else {
      int mid = get_median(x, y);
      long long left_sum[3] = {get(0, x - 1), get(1, x - 1), get(2, x - 1)};
      long long mid_sum[3] = {get(0, mid), get(1, mid), get(2, mid)};
      long long right_sum[3] = {get(0, y), get(1, y), get(2, y)};
      long long ans = (mid_sum[1] - left_sum[1]) % MOD;
      ans = (ans + ((A[mid] - mid) % MOD) * ((mid_sum[0] - left_sum[0]) % MOD) %
                       MOD) %
            MOD;
      ans = (ans - mid_sum[2] + left_sum[2]) % MOD;
      ans = (ans - right_sum[1] + mid_sum[1]) % MOD;
      ans = (ans - ((A[mid] - mid) % MOD) *
                       ((right_sum[0] - mid_sum[0]) % MOD) % MOD) %
            MOD;
      ans = (ans + right_sum[2] - mid_sum[2]) % MOD;
      if (ans < 0) ans += MOD;
      cout << ans << "\n";
    }
  }
  return 0;
}
