#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
const int MOD = 1e9 + 7;
inline void add(long long &a, const long long &b) {
  if ((a += b) >= MOD) a -= MOD;
}
int a[N], w[N];
long long c1[N], c2[N];
inline long long sum1(int x) {
  long long ret = 0;
  while (x) ret += c1[x], x -= (x & -x);
  return ret;
}
inline void add1(int x, long long d) {
  while (x < N) c1[x] += d, x += (x & -x);
}
inline long long sum2(int x) {
  long long ret = 0;
  while (x) add(ret, c2[x]), x -= (x & -x);
  return ret;
}
inline void add2(int x, long long d) {
  while (x < N) add(c2[x], d), x += (x & -x);
}
inline void work() {
  int n, q;
  scanf("%d%d", &n, &q);
  for (int i = 1; i <= n; i++) {
    scanf("%d", a + i);
    a[i] -= i;
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", w + i);
    add1(i, w[i]);
    add2(i, 1LL * w[i] * a[i] % MOD);
  }
  while (q--) {
    int x, y;
    scanf("%d%d", &x, &y);
    if (x < 0) {
      add1(-x, -w[-x] + y);
      add2(-x, (1LL * (-w[-x] + y) * a[-x] % MOD + MOD) % MOD);
      w[-x] = y;
    } else {
      int L = x, R = y;
      long long t = sum1(L - 1), sum = sum1(R) - t;
      while (L < R) {
        int M = (L + R) >> 1;
        if (2 * (sum1(M) - t) < sum)
          L = M + 1;
        else
          R = M;
      }
      long long t1 =
          ((sum1(L) - t) % MOD * a[L] % MOD - (sum2(L) - sum2(x - 1)) % MOD) %
          MOD;
      long long t2 = (-(sum1(y) - sum1(L)) % MOD * a[L] % MOD +
                      (sum2(y) - sum2(L)) % MOD) %
                     MOD;
      long long ans = (t1 + t2) % MOD;
      printf("%lld\n", (ans + MOD) % MOD);
    }
  }
}
int main() {
  work();
  return 0;
}
