#include <bits/stdc++.h>   using namespace std;   int main() {     long long n, m, t, d;     cin >> n >> m;     map<long long, long long> mp;     set<pair<long long, long long> > st;     vector<long long> a(n), c(n);     for (int i = 0; i < n; i++) {       cin >> a[i];       mp[i] = a[i];     }     for (int i = 0; i < n; i++) {       cin >> c[i];       st.insert({c[i], i});     }     for (int i = 0; i < m; i++) {       cin >> t >> d;       long long cost = 0;       t--;       if (st.size() == 0)         cout << 0 << endl;       else {         if (mp[t] != 0) {           if (mp[t] > d) {             mp[t] -= d;             cout << (long long)d * c[t] << endl;             d = 0;           } else if (mp[t] == d) {             mp[t] -= d;             cout << (long long)d * c[t] << endl;             d = 0;             st.erase({c[t], t});           } else {             cost += (long long)mp[t] * c[t];             d -= mp[t];             mp[t] = 0;             st.erase({c[t], t});           }         }         if (d > 0) {           while (d > 0 && st.size() > 0) {             pair<int, int> now = *st.begin();             if (mp[now.second] > d) {               mp[now.second] -= d;               cout << (long long)cost + d * now.first << endl;               d = 0;             } else if (mp[now.second] == d) {               mp[now.second] -= d;               cout << (long long)cost + d * now.first << endl;               d = 0;               st.erase(st.begin());             } else {               cost += (long long)mp[now.second] * now.first;               d -= mp[now.second];               mp[now.second] = 0;               st.erase(st.begin());             }           }           if (d > 0) {             cout << 0 << endl;           }         }       }     }     return 0;   }   